51nod1158 最大子矩形 单调栈应用
Posted zsben991126
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod1158 最大子矩形 单调栈应用相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int mp[600][600],m,n,ans; void work(int i){//以第i行为底的矩阵 int stk[600],w[600]={},h[600]={},top=0;//高度栈,左宽栈 memset(stk,-1,sizeof stk); for(int j=1;j<=m;j++)h[j]=mp[i][j]; for(int j=1;j<=m;j++){ if(h[j]>stk[top]) stk[++top]=h[j],w[top]=1; else { int cnt=0; while(top>=1 && stk[top]>=h[j]){ ans=max(ans,stk[top]*(w[top]+cnt)); cnt+=w[top--]; } stk[++top]=h[j]; w[top]=cnt+1; } } } int main(){ while(scanf("%d%d",&n,&m)==2){ memset(mp,0,sizeof mp); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&mp[i][j]); m++;//在最右边添一个全0列 for(int j=1;j<=m;j++) for(int i=1;i<=n;i++) if(mp[i][j]==1)mp[i][j]=mp[i-1][j]+1; ans=0; for(int i=1;i<=n;i++) work(i); printf("%d ",ans); } }
以上是关于51nod1158 最大子矩形 单调栈应用的主要内容,如果未能解决你的问题,请参考以下文章
HDU -1506 Largest Rectangle in a Histogram&&51nod 1158 全是1的最大子矩阵 (单调栈)
51nod 1102 面积最大的矩形 && 新疆大学OJ 1387: B.HUAWEI's billboard 单调栈+拼凑段(o(n) 或 o(nlog(n))