题目链接: ​​http://acm.hdu.edu.cn/showproblem.php?pid=1505​




题意:给定一个地图,找出一个矩形可以覆盖的最大面积



开两个数组r[](right),l[](left),



分别记录左边和右边能构成矩形的最远的边



用a[i][j]表示  在i高度j位置上的最大高度



#include


#define N 1002


int a[N][N];


int l[N],r[N];


int n,m;


char ch[10];


__int64 max,ans;


int main(){





int T,i,j;


scanf("%d",&T);


while(T--){


scanf("%d%d",&n,&m);


for(i=0;i<=m;i++) a[0][i]=0;


for(i=1;i<=n;i++)


for(j=1;j<=m;j++){


scanf("%s",ch);


if(ch[0]=='F')


a[i][j]=a[i-1][j]+1;


else a[i][j]=0;


}








for(i=1;i<=n;i++){





for(j=1;j<=m;j++)


l[j]=r[j]=j;


for(j=1;j<=m;j++)


while(a[i][j]<=a[i][l[j]-1])


l[j]=l[l[j]-1];


for(j=m;j>=1;j--)


while(a[i][j]<=a[i][r[j]+1])


r[j]=r[r[j]+1];


for(j=1;j<=m;j++){




}


}





}


return 0;


}



本题的减弱版: ​​http://acm.hdu.edu.cn/showproblem.php?pid=1506​






题解: ​​http://blog.sina.com.cn/s/blog_9635e5ef0101basp.html​