题目1497:面积最大的全1子矩阵
2013-05-30 18:53
357 查看
题目描述:
在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多。
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入的第一行是两个整数m、n(1<=m、n<=1000):代表将要输入的矩阵的大小。
矩阵共有m行,每行有n个整数,分别是0或1,相邻两数之间严格用一个空格隔开。
输出:
对应每个测试案例,输出矩阵中面积最大的全1子矩阵的元素个数。
样例输入:
样例输出:
在一个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
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int mat[1010][1010]; int h[1010]; int l[1010]; int r[1010]; int main() { int n,m; while (scanf ("%d%d",&m,&n) == 2) { for (int i = 1;i <= m;i ++) { for (int j = 1;j <= n;j ++) { scanf ("%d",&mat[i][j]); } } int ans = 0; memset(h,0,sizeof(h)); for(int i = 1;i <= m; i++){ for(int j = 1; j <= n; j++){ if(mat[i][j] == 1) h[j]++; else h[j] = 0; } h[0] = h[n + 1] = -1; for(int j = 1;j <= n; j++){ int k = j; while(h[j] <= h[k - 1]) k = l[k - 1]; l[j] = k; } for(int j = n;j >= 1;j--){ int k = j; while(h[j] <= h[k + 1]) k = r[k + 1]; r[j] = k; } for(int j = 1; j <= n; j++){ if(ans < h[j] * (r[j] - l[j] + 1)) ans = h[j] * (r[j] - l[j] + 1); } } cout << ans << endl; } return 0; }
相关文章推荐
- 九度OJ; 题目1497:面积最大的全1子矩阵
- [Jobdu] 题目1497:面积最大的全1子矩阵
- 题目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子矩阵
- 动态规划-面积最大的全1子矩阵
- 面积最大的全1子矩阵
- Codeforce 375B 给定5000的布尔矩阵 求最大面积的全1子矩阵
- 题目1102:最小面积子矩阵(暴力求解&最大连续子序列)
- 面积最大的全1子矩阵
- 面积最大的全1子矩阵
- 面积最大的全1子矩阵