2013年9月18日 星期三

TIOJ 1122 最大子矩陣

[預處理]

是說北市賽N<=20是可以爆搜的意思嗎@@....(我沒試過QAQ)



#include<stdio.h>
#include<stdlib.h>
int main()
{
 int met[21][21];
 int prc[21][21];
 int n,e;
 while(scanf("%d %d",&n,&e)==2)
 {
  met[1][1]=e;
  for(int lx=0;lx<=n;lx++)
  {
   met[lx][0]=0;
   met[0][lx]=0;
  }
  for(int lx=1;lx<=n;lx++)
  {
   for(int ly=1;ly<=n;ly++)
   {
    if((ly==1)&&(lx>1))
     met[lx][1]=e+lx;
    else if((lx+ly)>2)
     met[lx][ly]=((met[lx][ly-1]*17)%103)*(1-((lx+ly)%2)*2);
   }
  }
  for(int lx=1;lx<=n;lx++)
   for(int ly=1;ly<=n;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<=n;cy1++)
     for(int cy2=cy1;cy2<=n;cy2++)
      if(max<=prc[cx2][cy2]-prc[cx2][cy1-1]-prc[cx1-1][cy2]+prc[cx1-1][cy1-1])
       max=prc[cx2][cy2]-prc[cx2][cy1-1]-prc[cx1-1][cy2]+prc[cx1-1][cy1-1];
     
  printf("%d\n",max);  
 }
 return 0;
}


沒有留言:

張貼留言