。。。一个变量打错。。。调了一个上午。。。擦的
#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);
}
}
啊
浙公网安备 33010602011771号