洛谷P4147 玉蟾宫

继续悬线法,参考上一篇博客可以秒切

代码:

#include<cstdio>
#include<algorithm>
#include<iostream>
#define maxn 1010
using namespace std;
int le[maxn][maxn],ri[maxn][maxn],up[maxn][maxn];
char mp[maxn][maxn];
int main()
{
    int n,m;
    int ans=0;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            cin>>mp[i][j];
            le[i][j]=ri[i][j]=j;
            up[i][j]=1;
        }
    for(int i=1;i<=n;i++)
        for(int j=2;j<=m;j++)
            if(mp[i][j]=='F'&&mp[i][j-1]=='F')
                le[i][j]=le[i][j-1];
    for(int i=1;i<=n;i++)
        for(int j=m-1;j>=1;j--)
            if(mp[i][j]=='F'&&mp[i][j+1]=='F')
                ri[i][j]=ri[i][j+1];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            if(i>1&&mp[i][j]=='F'&&mp[i-1][j]=='F')
            {
                le[i][j]=max(le[i-1][j],le[i][j]);
                ri[i][j]=min(ri[i-1][j],ri[i][j]);
                up[i][j]=up[i-1][j]+1;
            }
            int a=ri[i][j]-le[i][j]+1;
            ans=max(ans,a*up[i][j]);
        }
    printf("%d",3*ans);
    return 0;
}            
原文地址:https://www.cnblogs.com/charlesss/p/10597452.html