动态规划-面积最大的全1子矩阵
2013-05-22 14:11
274 查看
题目描述:
在一个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 <stdio.h> #include <string.h> #include <iostream> using namespace std; int mat[1010][1010]; int h[1010]; //当前的高度 int l[1010]; //存储符合当前高度的,左起始位置 int r[1010]; //右起始位置 int main() { int n, m; freopen("input.txt", "r", stdin); while (scanf("%d%d", &n, &m) == 2) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { scanf("%d", &mat[i][j]); } } memset(h, 0, sizeof(h)); int ans = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (mat[i][j] == 1) { h[j]++; } else { h[j] = 0; } } h[0] = h[m + 1] = -1; //l[j] : 符合高度h[j]的矩阵的左起始位置 for (int j = 1; j <= m; j++) { int k = j; // k存储 左起始位置 while (h[j] <= h[k - 1]){ k = l[k - 1]; //依次和前一个高度比较,如果当前高度小于等于k的前一个,则 k继续向左。 } l[j] = k; } // for (int j = 1; j <= m; j++) // { // cout << l[j] << " "; // } // cout << endl ; for (int j = m; j >= 1; j--) { int k = j; while (h[j] <= h[k + 1]) k = r[k + 1]; r[j] = k; } // for (int j = 1; j <= m; j++) // { // cout << r[j] << " "; // } // cout << endl <<endl; for (int j = 1; j <= m; j++) { if (ans < h[j] * (r[j] - l[j] + 1)) { ans = h[j] * (r[j] - l[j] + 1); } } } printf("%d\n", ans); } return 0; }
相关文章推荐
- BZOJ 2969 浅谈矩阵期望动态规划面积分布式转移
- 动态规划--最大子段和升级 最大矩阵和 hd1081
- Codeforce 375B 给定5000的布尔矩阵 求最大面积的全1子矩阵
- 题目1497:面积最大的全1子矩阵
- 动态规划——寻找子矩阵最大和
- 九度OJ 1497 面积最大的全1子矩阵 -- 动态规划
- 动态规划求解从矩阵左上角到右下角的最大受益问题
- 动态规划最大子矩阵
- 动态规划——寻找子矩阵最大和
- 九度OJ 1497 面积最大的全1子矩阵 -- 动态规划
- 九度1497:面积最大的全1子矩阵
- 动态规划——寻找子矩阵最大和
- 九度OJ 1497:面积最大的全1子矩阵(DP)
- 九度 1497:面积最大的全1子矩阵
- 腾讯面试题(九度)——面积最大的全1子矩阵
- 面积最大的全1子矩阵
- 动态规划——寻找子矩阵最大和
- 面积最大的全1子矩阵(腾讯2012年暑期实习生招聘面试二面试题)
- JD 1497:面积最大的全1子矩阵
- 动态规划——寻找子矩阵最大和