码迷,mamicode.com
首页 > 其他好文 > 详细

51Nod 1158 全是1的最大子矩阵

时间:2017-10-10 20:45:20      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:cout   open   ges   并且   ide   最大   char   int   class   

                       1158 全是1的最大子矩阵
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
技术分享 收藏
技术分享 关注
给出1个M*N的矩阵M1,里面的元素只有0或1,找出M1的一个子矩阵M2,M2中的元素只有1,并且M2的面积是最大的。输出M2的面积。
 
Input
第1行:2个数m,n中间用空格分隔(2 <= m,n <= 500)
第2 - N + 1行:每行m个数,中间用空格分隔,均为0或1。
Output
输出最大全是1的子矩阵的面积。
Input示例
3 3
1 1 0
1 1 1
0 1 1
Output示例
4
技术分享
李陶冶 (题目提供者)
 
 水题 把0看作极小值 求最大子矩阵即可 
技术分享
 1 #include <cstdio>
 2 #include <cctype>
 3 #include <iostream>
 4 
 5 typedef long long LL;
 6 
 7 const int INF=1000000;
 8 const int MAXN=510;
 9 
10 int n,m;
11 
12 int a[MAXN][MAXN];
13 
14 LL ans;
15 
16 inline void read(int&x) {
17     int f=1;register char c=getchar();
18     for(x=0;!isdigit(c);c==-&&(f=-1),c=getchar());
19     for(;isdigit(c);x=x*10+c-48,c=getchar());
20     x=x*f;
21 }
22 
23 
24 int hh() {
25     read(n);read(m);
26     for(int i=1;i<=n;++i) 
27       for(int j=1;j<=m;++j) {
28           read(a[i][j]);
29           if(!a[i][j]) a[i][j]=-INF;
30           a[i][j]+=a[i-1][j];
31       }
32     for(int i=0;i<=n;++i)
33       for(int j=i+1;j<=n;++j) {
34           LL tot=0;
35           for(int k=1;k<=m;++k) {
36               if(tot<0) tot=a[j][k]-a[i][k];
37               else tot+=a[j][k]-a[i][k];
38               ans=tot>ans?tot:ans;
39         }
40       }
41     std::cout<<ans;
42     return 0;
43 }
44 
45 int sb=hh();
46 int main(int argc,char**argv) {;}
代码

 

 

51Nod 1158 全是1的最大子矩阵

标签:cout   open   ges   并且   ide   最大   char   int   class   

原文地址:http://www.cnblogs.com/whistle13326/p/7647382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!