HDU 1505 City Game【DP】

题意:是二维的1506,即在1506的基础上,再加一个for循环,即从第一行到最后一行再扫一遍---


自己写的时候,输入的方法不对---发现输不出结果,后来看了别人的----@_@
发现是将字母和空格当成一个字符串来输入的。

#include<iostream>  
#include<cstdio>  
#include<cstring>  
#include<algorithm>  
using namespace std;
int h[1010][1010],l[1010],r[1010];
char c[105];
int main()
{
	int ncase,n,m,i,j,ans,tmp;
	char ch;
	scanf("%d",&ncase);
	while(ncase--)
	{
		ans=0;
		scanf("%d %d",&m,&n);
		for(i=1;i<=m;i++)
		{
			for(j=1;j<=n;j++)
			{
				scanf("%s",c);//输入是将字母和空格当成了一个字符串 
				if(c[0]=='F') h[i][j]=h[i-1][j]+1;
				else h[i][j]=0;		
			}
		}
		
		for(i=1;i<=m;i++)
		{
			h[i][0]=-1;h[i][n+1]=-10000;//边界的值可以规定为任意负数 
			for(j=1;j<=n;j++)
			l[j]=r[j]=j;			
			for(j=2;j<=n;j++)
			{
				while(h[i][l[j]-1]>=h[i][l[j]])
				l[j]=l[l[j]-1];
			}
			for(j=n-1;j>=1;j--)
			{
				while(h[i][r[j]+1]>=h[i][r[j]])
				r[j]=r[r[j]+1];
			}
			for(j=1;j<=n;j++)
			{
				tmp=h[i][j]*(r[j]-l[j]+1);
				if(tmp>ans) ans=tmp;
			}
		}
		printf("%d\n",ans*3);		
	}
}

  

posted @ 2015-02-11 10:16  sequenceaa  阅读(130)  评论(0编辑  收藏  举报