hdu1505 City Game
1506的扩展 这个就不哆嗦了 知道了1506怎么做 那这道题也就出来了
输入时注意一些
#include<iostream>
#include<cstdlib>
#include<stdio.h>
#define LL long long
#define Max(a,b) a>b?a:b
using namespace std;
const int N=1005;
int a[N][N],l[N][N],r[N][N],maxn,s;
int main()
{
int t;char ch;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int j=0;j<=m;j++)
a[0][j]=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf(" %c",&ch);
a[i][j]=(ch=='R'?0:a[i-1][j]+1);
}
}
for(int i=1;i<=n;i++)
l[i][1]=1,r[i][m]=m;
for(int i=1;i<=n;i++)
for(int j=2;j<=m;j++)
{
int tt=j;
while(tt>1&&a[i][j]<=a[i][tt-1]) tt=l[i][tt-1];
l[i][j]=tt;
}
for(int i=1;i<=n;i++)
for(int j=m-1;j>=1;j--)
{
int tt=j;
while(tt<m&&a[i][j]<=a[i][tt+1]) tt=r[i][tt+1];
r[i][j]=tt;
}
maxn=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
maxn=Max(maxn,(r[i][j]-l[i][j]+1)*a[i][j]);
printf("%I64d\n",maxn*3);
}
return 0;
}