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);
}
}

浙公网安备 33010602011771号