。。。一个变量打错。。。调了一个上午。。。擦的
#include<stdio.h> #include<string.h> int n,k; int a[100][100]; int dp[100][100]; int move[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; int inarea(int x,int y) { return x>=0 && y>=0 && x<n && y<n; } int dfs(int x,int y) { if (dp[x][y]>0) return dp[x][y]; for (int i=0; i<4; i++) { for (int j=1; j<=k; j++) { if (inarea(x+j*move[i][0],y+j*move[i][1]) && a[x+j*move[i][0]][y+j*move[i][1]]>a[x][y]) { if(dfs(x+j*move[i][0],y+j*move[i][1])+a[x][y]>dp[x][y]) dp[x][y]=dfs(x+j*move[i][0],y+j*move[i][1])+a[x][y]; } } } if (dp[x][y]==-1) { dp[x][y]=a[x][y]; } return dp[x][y]; } int main() { while (scanf("%d%d",&n,&k),~n || ~k) { memset(dp, -1, sizeof(dp)); for (int i=0; i<n; i++) for (int j=0; j<n; j++) scanf("%d",a[i]+j); dfs(0, 0); int max=-1000000; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { if (dp[i][j]>max) { max=dp[i][j]; } } } printf("%d\n",max); } }
啊