当前位置:编程学习 > C/C++ >>

HDU1505/POJ1964 City Game

和HDU 1506类似,用a[i][j]表示  在i高度j位置上的最大高度

 [cpp]
#include<stdio.h> 
#define N 1002 
int a[N][N]; 
int l[N],r[N]; 
int n,m;  www.zzzyk.com
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;//若遇上‘R’,高度置零 
        } 
        max=0; 
     for(i=1;i<=n;i++)//从第一行开始扫描,其他实现几乎与HDU 1506一样 
     { 
         a[i][0]=a[i][m+1]=-1; 
         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++) 
        { 
           ans=a[i][j]*(r[j]-l[j]+1)*3; 
           if(max<ans) max=ans; 
        }        
     } 
      printf("%I64d\n",max); 
   } 
   return 0; 


 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,