POJ 3494 Largest Submatrix of All 1's(最大全1子矩阵面积、单调栈)
来源:互联网 发布:mac的免费游戏 编辑:程序博客网 时间:2024/04/29 07:21
题目链接:
POJ 3494 Largest Submatrix of All 1’s
题意:
给出一个
数据范围:
分析:
我们把每一行单独处理,把从这行向上连续延伸全为1的最大长度看成是矩形的高,那么每行其实就是求个最大矩形面积。
需要用
#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>using namespace std;typedef long long ll;const int MAX_N = 2010;int n, m, ans;int mat[MAX_N][MAX_N];int height[MAX_N][MAX_N], sta[MAX_N], L[MAX_N], R[MAX_N];//height[i][j]:第i行第j列元素往上最长的连续1长度//维护单调非递减栈void solve(int row){ int top = 0, cur; height[row][m + 1] = 0; for (int j = 1; j <= m + 1; ++j) { while (1) { cur = sta[top]; if (height[row][cur] <= height[row][j]) break; R[cur] = j; --top; } L[j] = cur; sta[++top] = j; } for (int j = 1; j <= m; ++j) { if(mat[row][j] == 0) continue; int len = R[j] - L[j] - 1; ans = max(ans, height[row][j] * len); // printf("height[%d][%d] = %d len = %d\n", row, j, height[row][j], len); }}int main(){ while (~scanf("%d%d", &n, &m)) { for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { scanf("%d", &mat[i][j]); } } memset (height, 0, sizeof(height)); for (int j = 1; j <= m; ++j) { for (int i = 1; i <= n; ++i) { if (mat[i][j] == 1) { height[i][j] = 1; while (mat[++i][j] == 1) { height[i][j] = height[i - 1][j] + 1; } --i; } } } ans = 0; for (int i = 1; i <= n; ++i) { solve(i); } printf("%d\n", ans); } return 0;}
0 0
- POJ 3494 Largest Submatrix of All 1's(最大全1子矩阵面积、单调栈)
- Largest Submatrix of All 1’s(POJ 3494) 单调栈
- poj 3494 Largest Submatrix of All 1’s(单调栈)
- POJ-3494-Largest Submatrix of All 1’s-还是单调栈
- POJ 3494 Largest Submatrix of All 1’s(单调栈||dp)
- POJ-3494 Largest Submatrix of All 1’s(单调栈)
- poj 3494 Largest Submatrix of All 1’s 单调栈/DP迭代法
- (POJ 3494)Largest Submatrix of All 1’s (DP、单调栈)
- POJ-3494--Largest Submatrix of All 1’s---单调栈的应用
- poj 3494 Largest Submatrix of All 1’s(单调栈)
- POJ 3494 Largest Submatrix of All 1’s 单调栈应用 图解+代码详解
- poj3494 Largest Submatrix of All 1’s 单调栈+dp
- POJ3494---Largest Submatrix of All 1’s(单调栈)
- 单调栈 Largest Submatrix of All 1’s poj3494
- POJ3494 Largest Submatrix of All 1’s[单调栈]
- Largest Submatrix of All 1’s----单调栈
- 单调栈--poj3494 Largest Submatrix of All 1’s
- Largest Submatrix of All 1’s POJ
- Gitlab部署和汉化以及简单运维
- 学习Twi1ightda大牛的logintest.bat脚本
- SDUT1479数据结构实验之栈:行编辑器
- HTML 学习笔记(二)
- Annotation注解解析
- POJ 3494 Largest Submatrix of All 1's(最大全1子矩阵面积、单调栈)
- 敏捷 学习 - 破袭的故事 - 故事架构
- C++之STL(5)之 set 与 multiset
- SDUT2449走迷宫
- DFS-Sticks(扑克24点)
- 工作两年的总结(2016-07-25)
- 存储过程的创建
- SDUT1334简单字符串排序
- JavaWeb基础知识:JavaScript快速入门