51Nod-1157-全是1的最大子矩阵
2017-11-11 01:32
281 查看
ACM模版
描述
题解
很经典的一个问题,最大 1 矩阵模板,直接套。代码
#include <iostream> using namespace std; const int N = 105; int m, n; bool a ; int Run(const int &m, const int &n) // a[1...m][1...n] { // O(m*n) int i, j, k, l, r, max = 0; int col ; for (j = 1; j <= n; j++) { if (a[1][j] == 0 ) { col[j] = 0; } else { for (k = 2; k <= m && a[k][j] == 1; k++); col[j] = k - 1; } } for (i = 1; i <= m; i++) { if (i > 1) { for (j = 1; j <= n; j++) { if (a[i][j] == 0) { col[j] = 0; } else { if (a[i - 1][j] == 0) { for (k = i + 1; k <= m && a[k][j] == 1; k++); col[j] = k-1; } } } } for (j = 1; j <= n; j++) { if (col[j] >= i) { for (l = j - 1; l > 0 && col[l] >= col[j]; --l); l++; for (r = j + 1; r <= n && col[r] >= col[j]; ++r); r--; int res = (r - l + 1) * (col[j] - i + 1); if( res > max ) { max = res; } } } } return max; } int main() { cin >> m >> n; for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { cin >> a[i][j]; } } cout << Run(m, n) << '\n'; return 0; }
参考
《最大 1 矩阵》相关文章推荐
- 51Nod 1051 最大子矩阵和 (最大子段和变形)
- [悬线法] 51Nod 1158 全是1的最大子矩阵
- 51nod 1051 最大子矩阵和
- 51nod 1051 最大子矩阵和
- 51nod-最大子矩阵和
- 51nod 1051 最大子矩阵和 (dp )
- 51nod 1158 全是1的最大子矩阵
- 51Nod 最大子矩阵和 | DP
- 51nod 1051 最大子矩阵和 (dp_good)
- 51nod-1158 全是1的最大子矩阵(单调栈)
- 51nod 1051 最大子矩阵和
- 51Nod 1051 最大子矩阵和(二维最大字段和dp)
- 51nod--最大子段和 and 最大子矩阵和
- 51nod-dp入门-最大子矩阵和
- 51nod 1051 最大子矩阵和
- 51nod 1158 全是1的最大子矩阵 (暴力枚举)
- 51Nod - 1158 全是1的最大子矩阵 单调栈
- 51Nod 1158 全是1的最大子矩阵
- 51NOD 1158 全是1的最大子矩阵
- 51nod 1049 1050 1051 (循环数组)最大子段(子矩阵)和(dp)