题意:是二维的1506,即在1506的基础上,再加一个for循环,即从第一行到最后一行再扫一遍---
自己写的时候,输入的方法不对---发现输不出结果,后来看了别人的----@_@发现是将字母和空格当成一个字符串来输入的。#include#include #include #include 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); }}