博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大全零子矩阵
阅读量:5099 次
发布时间:2019-06-13

本文共 1359 字,大约阅读时间需要 4 分钟。

【题目描述】

在一个0,1方阵中找出其中最大的全0子矩阵,所谓最大是指0的个数最多。

【输入描述】

输入第一行为整数N,其中1<=N<=2000,为方阵的大小,紧接着N行每行均有N个0或1,相邻两数间严格用一个空格隔开。

【输出描述】
输出仅一行包含一个整数表示要求的最大的全零子矩阵中零的个数。
【样例输入】

5

0 1 0 1 0
0 0 0 0 0
0 0 0 0 1
1 0 0 0 0
0 1 0 0 0

【样例输出】

9

源代码:#include
int n,ans(0),i[2001][2001],left[2001][2001],right[2001][2001],f[2001][2001]={
0};int main(){ scanf("%d",&n); for (int a=1;a<=n;a++) { scanf("%d",&i[a][1]); left[a][1]=i[a][1]==1?2:1; //边界。 for (int b=2;b<=n;b++) { scanf("%d",&i[a][b]); if (!i[a][b]) //初始化左端。 left[a][b]=left[a][b-1]; else left[a][b]=b+1; } right[a][n]=i[a][n]==1?n-1:n; //边界。 for (int b=n-1;b>0;b--) if (!i[a][b]) //初始化右端。 right[a][b]=right[a][b+1]; else right[a][b]=b-1; } for (int a=1;a<=n;a++) //边界。 f[1][a]=i[1][a]==1?0:1; for (int a=2;a<=n;a++) for (int b=1;b<=n;b++) if (!i[a][b]) {   f[a][b]=f[a-1][b]+1; //悬线法。(Orz 神犇 王知昆)   if (!i[a-1][b]) //依据上方的点更新左端右端。 {   left[a][b]=left[a][b]>left[a-1][b]?left[a][b]:left[a-1][b];   right[a][b]=right[a][b]
ans) ans=t; } printf("%d",ans); return 0;}

转载于:https://www.cnblogs.com/Ackermann/p/5348336.html

你可能感兴趣的文章
Ubuntu下安装libpcap+测试安装
查看>>
Android activity间通讯几种方式
查看>>
iOS中遇到Unkown type name NSString Unkown type name CGFloat
查看>>
黑马程序员_JavaScript变量转换和Jquery对象的转换
查看>>
AMP模式下共享内存通信的两种定义方法
查看>>
Offline Package Installation II
查看>>
2017-07-19
查看>>
Spring-JDBC实现Contact的CRUD
查看>>
tornado上手
查看>>
PHP基础加固8——控制结构1
查看>>
学霸系统UI部分功能规格说明书
查看>>
android 与C# UDP通信
查看>>
Android 8 Wifi 初始化过程
查看>>
Oracle 用拼接字符串更新表 测试
查看>>
Java技术第四次作业
查看>>
有哪些不能不知道的移动应用开发推广指南和移动互联网数据 ?
查看>>
Servlet的request应用案例
查看>>
DWR的配置以及常见错误的处理
查看>>
Finite Encyclopedia of Integer Sequences
查看>>
JavaScript 数据实用程序库:Datalib
查看>>