2013年9月18日 星期三

TIOJ 1134 蓋房子問題

[預處理]
ㄎㄎ 這和 最大子矩陣 一樣處理方法XD

#include<stdio.h>
#include<stdlib.h>
int main()
{
 int met[202][202];
 int prc[202][202];
 int n,m;
 int T,lT;scanf("%d",&T);
 for(lT=1;lT<=T;lT++)
 {
  scanf("%d %d",&n,&m);
  for(int lx=0;lx<=200;lx++)
  {
   met[lx][0]=0;
   met[0][lx]=0;
  }
  for(int lx=1;lx<=n;lx++)
  {
   for(int ly=1;ly<=m;ly++)
   {
    int inp;
    scanf("%d",&inp);
    met[lx][ly]=(inp==0)? 1:-1;
   }
  }
  for(int lx=1;lx<=n;lx++)
   for(int ly=1;ly<=m;ly++)
    prc[lx][ly]=prc[lx-1][ly]+prc[lx][ly-1]-prc[lx-1][ly-1]+met[lx][ly]; 
  int max=0;
  for(int cx1=1;cx1<=n;cx1++)
   for(int cx2=cx1;cx2<=n;cx2++)
    for(int cy1=1;cy1<=m;cy1++)
     for(int cy2=cy1;cy2<=m;cy2++)
      if((0<prc[cx2][cy2]-prc[cx2][cy1-1]-prc[cx1-1][cy2]+prc[cx1-1][cy1-1])&&(max<=(cx2-cx1+1)*(cy2-cy1+1)))
       max=(cx2-cx1+1)*(cy2-cy1+1);
     
  printf("%d\n",max);  
 }
 return 0;
}



沒有留言:

張貼留言