博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【codevs 1159】最大全0子矩阵 (悬线法)
阅读量:5287 次
发布时间:2019-06-14

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

1159 最大全0子矩阵

时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold
题目描述 Description
在一个0,1方阵中找出其中最大的全0子矩阵,所谓最大是指O的个数最多。

输入描述 Input Description

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

输出描述 Output Description

输出文件仅一行包含一个整数表示要求的最大的全零子矩阵中零的个数。

样例输入 Sample Input

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

样例输出 Sample Output

9

【最大子矩阵的第二种算法模板】

#include
#include
#include
using namespace std;int h[2010][2010],l[2010][2010],r[2010][2010];int n,maxl,maxr,ans,a[2010][2010];int main(){ int i,j; scanf("%d",&n); for(i=1;i<=n;++i) for(j=1;j<=n;++j) scanf("%d",&a[i][j]); for(i=1;i<=n;++i) r[0][i]=n; for(i=1;i<=n;++i) {
maxr=n; maxl=1; for(j=1;j<=n;++j) if(a[i][j]) {
maxl=j+1; h[i][j]=l[i][j]=0; } else {
h[i][j]=h[i-1][j]+1; l[i][j]=max(maxl,l[i-1][j]); } for(j=n;j>0;--j) if(a[i][j]) {
maxr=j-1; r[i][j]=n; } else {
r[i][j]=min(maxr,r[i-1][j]); ans=max(ans,(r[i][j]-l[i][j]+1)*h[i][j]); } } printf("%d",ans); return 0;}

转载于:https://www.cnblogs.com/lris-searching/p/9403183.html

你可能感兴趣的文章
java this
查看>>
Target runtime com.genuitec.runtime.generic.jee50 is not defined工程错误
查看>>
数学笔记
查看>>
计数器(牛客网)
查看>>
李连杰放弃中国国籍的原因
查看>>
【转】使用Jmeter录制web脚本
查看>>
【转】使用JMeter 完成常用的压力测试(一)
查看>>
shiro 重定向 后 带有 sessionId 的 解决 办法
查看>>
js中静态属性和方法
查看>>
Oracle实战笔记(第七天)之PL/SQL进阶
查看>>
CentOS
查看>>
常见的转义字符
查看>>
BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)
查看>>
Mount的用法详细解析
查看>>
asp.net 网页抓取内容
查看>>
在 Linux 上创建虚拟机规模集和部署高度可用的应用
查看>>
第【一】部分Netzob项目工具的安装配置
查看>>
Python环境更新pip模块失败
查看>>
java 中,没有任何方法和成员变量的接口
查看>>
Video/Audio禁止快进(退)
查看>>