学会用dp思想看问题,这一点还没完全做到,终于见识到dp真的很值得认真练习,DP,DP。。。。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 105
int m[MAX][MAX],dp[MAX][MAX],n,k;
int memSearch(int x,int y){
int a,i;
int max=0;
if(dp[x][y]!=-1) return dp[x][y];
for(i=1;i<=k;i++){
a=x-i;
if(a>=0&&a<n&&m[a][y]>m[x][y]){
dp[a][y]=memSearch(a,y);
if(dp[a][y]>max)max=dp[a][y];
}
a=x+i;
if(a>=0&&a<n&&m[a][y]>m[x][y]){
dp[a][y]=memSearch(a,y);
if(dp[a][y]>max)max=dp[a][y];
}
a=y-i;
if(a>=0&&a<n&&m[x][a]>m[x][y]){
dp[x][a]=memSearch(x,a);
if(dp[x][a]>max)max=dp[x][a];
}
a=y+i;
if(a>=0&&a<n&&m[x][a]>m[x][y]){
dp[x][a]=memSearch(x,a);
if(dp[x][a]>max)max=dp[x][a];
}
}
return m[x][y]+max;
}
int main(){
int i,j;
while(scanf("%d %d",&n,&k)!=EOF){
if(n==-1&&k==-1)break;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&m[i][j]);
memset(dp,-1,sizeof(dp));
printf("%d\n",memSearch(0,0));
}
system("pause");
return 0;
}