[BZOJ] 3039: 玉蟾宫
预处理每个点向左向右向上延伸的最长距离即可
实现上注意矩形的约束条件,也就是取min的过程
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN = 1005;
int n,m;
int a[MAXN][MAXN];
int h[MAXN][MAXN],l[MAXN][MAXN],r[MAXN][MAXN];
int main(){
cin>>n>>m;
char c;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c;
if(c=='F')a[i][j]=1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!a[i][j])continue;
h[i][j]=1;l[i][j]=1;
if(a[i-1][j])h[i][j]+=h[i-1][j];
if(a[i][j-1])l[i][j]+=l[i][j-1];
}
for(int j=m;j>=1;j--){
if(!a[i][j])continue;
r[i][j]=1;
if(a[i][j+1])r[i][j]+=r[i][j+1];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(h[i][j]<=1)continue;
l[i][j]=min(l[i][j],l[i-1][j]);
r[i][j]=min(r[i][j],r[i-1][j]);
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ans=max(ans,h[i][j]*(r[i][j]+l[i][j]-1));
}
}
cout<<3*ans;
return 0;
}
本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9771055.html