题目1497:面积最大的全1子矩阵
2013-07-18 17:00
267 查看
/* 题目描述: 在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多。 输入: 输入可能包含多个测试样例。 对于每个测试案例,输入的第一行是两个整数m、n(1<=m、n<=1000):代表将要输入的矩阵的大小。 矩阵共有m行,每行有n个整数,分别是0或1,相邻两数之间严格用一个空格隔开。 输出: 对应每个测试案例,输出矩阵中面积最大的全1子矩阵的元素个数。 样例输入: 2 2 0 0 0 0 4 4 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 样例输出: 0 4 思路: 每个点,分别扫描它向上,向左,向右衍生的边界 ,最后的面积就是 up[i][j]*(right[i][j]-left[i][j]+1) */ #include <stdio.h> const int N=1001; int map ,up ,left ,right ; int max(int x,int y) { if(x>y) return x; return y; } int min(int x,int y) { if(x<y) return x; return y; } int main() { int n,m; while(scanf("%d%d",&m,&n)!=EOF) { for(int i=0;i<m;i++) for(int j=0;j<n;j++) scanf("%d",&map[i][j]); int ans=0; for(int i=0;i<m;i++) { int lo=-1; int ro=n; for(int j=0;j<n;j++) { if(map[i][j]==0) { up[i][j]=0; left[i][j]=0; lo=j; } else { if(i==0) { up[i][j]=1; left[i][j]=lo+1; } else { up[i][j]=up[i-1][j]+1; left[i][j]=max(lo+1,left[i-1][j]); } } } for(int j=n-1;j>=0;j--) { if(map[i][j]==0) { right[i][j]=n; ro=j; } else { if(i==0) { right[i][j]=ro-1; } else { right[i][j]=min(ro-1,right[i-1][j]); } } ans=max(ans,up[i][j]*(right[i][j]-left[i][j]+1) ); } } printf("%d\n",ans); } return 0; }
相关文章推荐
- 题目1497:面积最大的全1子矩阵
- 九度OJ; 题目1497:面积最大的全1子矩阵
- [Jobdu] 题目1497:面积最大的全1子矩阵
- 题目1497:面积最大的全1子矩阵
- 九度1497:面积最大的全1子矩阵 (单调队列,单调栈)
- 九度OJ 1497 面积最大的全1子矩阵 -- 动态规划
- 九度1497:面积最大的全1子矩阵
- 九度OJ 1497 面积最大的全1子矩阵 -- 动态规划
- 九度OJ 1497:面积最大的全1子矩阵(DP)
- JD 1497:面积最大的全1子矩阵
- 面积最大的全1子矩阵--九度OJ 1497
- 九度 1497:面积最大的全1子矩阵
- 面积最大的全1子矩阵(腾讯2012年暑期实习生招聘面试二面试题)
- 面积最大的全1子矩阵
- 腾讯面试题(九度)——面积最大的全1子矩阵
- 动态规划-面积最大的全1子矩阵
- 面积最大的全1子矩阵
- Codeforce 375B 给定5000的布尔矩阵 求最大面积的全1子矩阵
- 题目1102:最小面积子矩阵(暴力求解&最大连续子序列)
- 面积最大的全1子矩阵