[bzoj3208]花神的秒题计划I
滑雪那道题变了一下,结果就跑到bzoj里面了
这数据范围也是感人。。
直接记忆化搜索,对于改变的值直接修改就可以了
在字符读入的时候卡了半天QAQ,还是需要用字符数组,毕竟它遇到空格就停下
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 int num[705][705],f[705][705]; 6 bool available[705][705]; 7 int n,m; 8 int fx[4]={0,0,1,-1}; 9 int fy[4]={1,-1,0,0}; 10 11 int search(int x,int y){ 12 if (f[x][y]!=-1) return f[x][y]; 13 int tmp=1; 14 for (int i=0;i<4;i++){ 15 if (available[x+fx[i]][y+fy[i]]&&num[x][y]>num[x+fx[i]][y+fy[i]]) 16 tmp=max(tmp,search(x+fx[i],y+fy[i])+1); 17 } 18 f[x][y]=tmp; 19 return tmp; 20 } 21 22 int main(){ 23 memset(num,-1,sizeof(num)); 24 memset(available,0,sizeof(available)); 25 scanf("%d",&n); 26 for (int i=1;i<=n;i++) 27 for (int j=1;j<=n;j++){ 28 scanf("%d",&num[i][j]); 29 available[i][j]=1; 30 } 31 scanf("%d",&m); 32 char c[2]; 33 int x,y,z,u; 34 for (int t=1;t<=m;t++){ 35 scanf("%s",c); 36 if (c[0]=='C') { 37 scanf("%d%d%d",&x,&y,&z); 38 num[x][y]=z; 39 } 40 if (c[0]=='S'){ 41 scanf("%d%d%d%d",&x,&y,&z,&u); 42 for (int i=x;i<=z;i++) 43 for (int j=y;j<=u;j++) 44 available[i][j]=0; 45 } 46 if (c[0]=='B'){ 47 scanf("%d%d%d%d",&x,&y,&z,&u); 48 for (int i=x;i<=z;i++) 49 for (int j=y;j<=u;j++) 50 available[i][j]=1; 51 } 52 //int time=0; 53 if (c[0]=='Q') { 54 //printf("%d\n",++time); 55 memset(f,-1,sizeof(f)); 56 int Ans=1; 57 for (int i=1;i<=n;i++) 58 for (int j=1;j<=n;j++){ 59 if (!available[i][j]) continue; 60 Ans=max(Ans,search(i,j)); 61 } 62 printf("%d\n",Ans); 63 } 64 } 65 return 0; 66 }