(POJ 3494)Largest Submatrix of All 1’s (DP、单调栈)
来源:互联网 发布:apache httppost 编辑:程序博客网 时间:2024/06/03 22:42
思路
求最大子矩阵问题相当于对每一行求最大矩形问题问题,可以用单调栈处理。
因为子矩阵必有开始行和结束行,相当于枚举开始行,然后通过histogram的最大矩形问题保证到结束行为止都是1且最宽
代码
用自带的栈会超时(因为我用了结构体和scanf的关系)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath> #include <stack>#define mem(a,b) memset(a,b,sizeof(a))#define rep(i,a,b) for(int i=a;i<b;i++)#define debug(a) printf("a =: %d\n",a);const int INF=0x3f3f3f3f;const int maxn=2e3+50;const int Mod=1000000007;typedef long long ll;using namespace std;struct Node{ int h,startPos; Node(){} Node(int startPos,int h){ this->h=h; this->startPos=startPos; } bool operator<(const Node &r)const{ return h<r.h; }};int m,n;Node st[maxn*10];int solve(int h[]){ int ans=0; int sz=0; st[sz++]=Node(0,-1); //压入最低的,防止栈空 (这样就不用判断) for(int i=1;i<=n+1;i++){ int height,curPos; if (i>n) height=0; //全部处理完,将元素出栈(除了第一个) else height=h[i]; curPos=i; //一开始起始位置在当前位置 Node tmp=Node(curPos,height); while(height<st[sz-1].h){ tmp=st[--sz]; int curAns=(curPos-tmp.startPos)*tmp.h; ans=max(ans,curAns); } st[sz++]=Node(tmp.startPos,height); } return ans;}int s[maxn][maxn];int cc[maxn][maxn];int main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif while(~scanf("%d %d",&m,&n)){ for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++) { scanf("%d",&s[i][j]); } } for(int c=1;c<=n;c++){ int cnt=0; for(int r=1;r<=m;r++){ if (s[r][c]) cc[r][c]=++cnt; else cc[r][c]=cnt=0; } } /* for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ printf("%d ",cc[i][j]); } puts(""); }*/ int ans=0; for(int i=1;i<=m;i++) ans=max(ans,solve(cc[i])); printf("%d\n",ans); } return 0;}
0 0
- Largest Submatrix of All 1’s(POJ 3494) 单调栈
- 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 (DP、单调栈)
- poj3494 Largest Submatrix of All 1’s 单调栈+dp
- POJ 3494 Largest Submatrix of All 1's(最大全1子矩阵面积、单调栈)
- POJ-3494-Largest Submatrix of All 1’s-还是单调栈
- POJ-3494 Largest Submatrix of All 1’s(单调栈)
- 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(单调栈)
- 单调栈 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
- CSS中为什么overflow:hidden能清除浮动(float)的影响?原理是什么?
- Ubuntu16.04安装Samba
- apache性能优化
- laravel框架的搜索后分页
- Java获取时间差(天数差,小时差,分钟差)
- (POJ 3494)Largest Submatrix of All 1’s (DP、单调栈)
- cocos斗地主发牌动画
- 树结构练习——排序二叉树的中序遍历
- ZZULI-oj-1913 小火山的计算能力 ( 模拟 )
- sort命令详解高级语法
- HDOJ 1558 Segment set(并查集 + 线段判交)
- hdu 4966 GGS-DDU (最小树形图)
- Scalaz(53)- scalaz-stream: 程序运算器-application scenario
- 隐私策略