记忆化搜索是什么东西???
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn(a,b) a>b?a:b
int path[101][101];
int sum[101][101];
int n,k;
//定义当前点前进的方向(垂直方向还是水平方向)
int l_r[4]={1,-1,0,0}; //水平方向
int u_d[4]={0,0,1,-1}; //垂直方向
//判断当前点是否越界
int bound(int x,int y)
{
if(x<0||x>=n||y<0||y>=n)
return 0;
else
return 1;
}
int dfs(int x,int y)
{
int i,h;
int c,r,number=0;
if(sum[x][y])return sum[x][y];
for(i=1;i<=k;i++)
{
for(h=0;h<=3;h++)
{
c = x + l_r[h]*i;
r = y + u_d[h]*i;
if(bound(c,r) && path[x][y]<path[c][r])
number = maxn(number,dfs(c,r));
}
}
return sum[x][y] = number + path[x][y];
}
int main()
{
int i,j;
while(scanf("%d %d",&n,&k)!=EOF && n!=-1)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&path[i][j]);
memset(sum,0,sizeof(sum));
printf("%d\n",dfs(0,0));
}
return 0;
}