程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU1505/POJ1964 City Game

HDU1505/POJ1964 City Game

編輯:C++入門知識

和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.2cto.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; 


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved