题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1505
题解:hdu1506的二维情况,见hdu1506题解。
#include <stdio.h>
#include <string.h>
#define MAXN 1002
int height[MAXN],left[MAXN],right[MAXN];
int main()
{
int n,m,i,j,ans,area,test;
char ch[5];
scanf("%d",&test);
while(test--)
{
ans=0;
memset(height,0,sizeof(height));
scanf("%d %d",&n,&m);
height[0]=height[m+1]=-1;
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
{
scanf("%s",ch);
if(ch[0]=='F')
height[j]++;
else
height[j]=0;
}
for(j=1;j<=m;++j)
left[j]=right[j]=j;
for(j=1;j<=m;++j)
{
while(height[left[j]-1]>=height[j])
left[j]=left[left[j]-1];
}
for(j=m;j>=1;--j)
{
while(height[right[j]+1]>=height[j])
right[j]=right[right[j]+1];
}
for(j=1;j<=m;++j)
{
area=height[j]*(right[j]-left[j]+1);
if(ans<area)
ans=area;
}
}
printf("%d\n",ans*3);
}
return 0;
}