开始的时候没有AC,在网上找了一个和我思路一样的代码。
通过和网上代码对照,找到了自己错误。已注释。
Problem : Judge Status : AcceptedRunId : 5915406 Language : C Author : Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
1 #include2 #include 3 #include 4 #define N 101 5 int a[N][N],b[N][N]; 6 int n,k; 7 int dp(int x,int y) 8 { 9 int maxn,i,tx,ty;10 if(b[x][y]!=-1)11 return b[x][y];12 maxn=0;13 for (i=1;i<=k;i++)14 {15 tx=x+i;16 if(tx>=0 && tx a[x][y])17 {18 if(b[tx][y]==-1)//没有求出max,就进行dp19 b[tx][y]=dp(tx,y);20 if(b[tx][y]>maxn)21 maxn=b[tx][y];22 } 23 tx=x-i;24 if(tx>=0 && tx a[x][y])25 {26 if(b[tx][y]==-1) 27 b[tx][y]=dp(tx,y);28 if(b[tx][y]>maxn) 29 maxn=b[tx][y];30 } 31 ty=y+i;32 if(ty>=0&&ty a[x][y])33 {34 if(b[x][ty]==-1) 35 b[x][ty]=dp(x,ty);36 if(b[x][ty]>maxn) 37 maxn=b[x][ty];38 } 39 ty=y-i;40 if(ty>=0&&ty a[x][y])41 {42 if(b[x][ty]==-1) 43 b[x][ty]=dp(x,ty);44 if(b[x][ty]>maxn) 45 maxn=b[x][ty];46 } 47 }48 b[x][y]=maxn+a[x][y];49 return b[x][y];50 }51 int main()52 {53 int i,j;54 while (scanf("%d%d",&n,&k),~n||~k)55 {56 for (i=0;i