对于50%的数据,1<=N,M<=200
对于100%的数据,1<=N,M<=1000
来源:Nescafe 20
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int m,n,i,j,l[2003],r[2003],h[2003];
int a[2003][2003],ans;
int main()
{
scanf("%d%d\n",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
char c; cin>>c;
if (c=='R') a[i][j]=1;
}
for (i=1;i<=m;i++) h[i]=0,l[i]=1,r[i]=m;
for (i=1;i<=n;i++)
{
int la=0,ra=m+1;
for (j=1;j<=m;j++)
if (a[i][j]) h[j]=0,l[j]=1,la=j;
else
h[j]++,l[j]=max(l[j],la+1);
for (j=m;j>0;j--)
if (a[i][j]) r[j]=m,ra=j;
else
r[j]=min(r[j],ra-1),ans=max(ans,(r[j]-l[j]+1)*h[j]);
}
printf("%d",ans*3);
}
悬线法求最大子矩阵