您的位置:首页 > 其它

hdu1505 City Game (最大子矩形)

2013-08-15 11:22 381 查看
题目链接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: