poj1924(单调栈求最大矩阵)

Posted lmjer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1924(单调栈求最大矩阵)相关的知识,希望对你有一定的参考价值。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn=1000+10;

bool tu[maxn][maxn];
int h[maxn][maxn],l[maxn],r[maxn];

int main(){
    int n,k,m;
    char c[10];
    scanf("%d",&k);
    while(k--){
        memset(tu,0,sizeof(tu));
        memset(h,0,sizeof(h));
        memset(l,0,sizeof(l));
        memset(r,0,sizeof(r));
        scanf("%d%d",&n,&m);
        for (int i=1;i<=n;i++){
            for (int j=1;j<=m;j++){
               scanf("%s",c);
               if(c[0]==F) tu[i][j]=true;
            }
        }
      int ans=0;
      for (int i=1;i<=n;i++){
        for (int j=1;j<=m;j++){
            if(tu[i][j]) h[i][j]=h[i-1][j]+1;
            else tu[i][j]=1;
        }
        r[m]=m;
        l[1]=1;
        for (int j=m-1;j>=1;j--){
            r[j]=j;
            if(h[i][j]<=h[i][j+1]) r[j]=r[j+1];
        }
        for (int j=2;j<=m;j++){
            l[j]=j;
            if(h[i][j]<=h[i][j-1]) l[j]=l[j-1];
        }
        for (int j=1;j<=m;j++){
            ans=max(ans,h[i][j]*(r[j]-l[j]+1));
        }
      }
      printf("%d",ans*3);
    }
return 0;
}

 

以上是关于poj1924(单调栈求最大矩阵)的主要内容,如果未能解决你的问题,请参考以下文章

HDOJ6957Maximal submatrix(单调栈,最大子矩阵面积)

POJ 2559 Largest Rectangle in a Histogram(单调栈)

单调栈应用

POJ2559Largest Rectangle in a Histogram(单调栈)

51nod 1215 数组的宽度&poj 2796 Feel Good(单调栈)

POJ3493 Largest Submatrix of All 1’s(单调栈)