点击打开链接
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int M = 110;
typedef struct{
int x1;
int y1;
}Num;
Num Move[4]={{-1,0},{1,0},{0,-1},{0,1}};
int ans,n,k,g[M][M],dp[M][M]; //dp[i][j] 以(i,j)为起始点出发最大能吃多少
int dfs(int x,int y) //终止条件:地图上最大的肯定能被算出来
{
if(dp[x][y])
{
return dp[x][y];
}
int a,b,c,MAX=0;
for(c=1;c<=k;c++)
{
for(int i=0;i<4;i++)
{
a=x+Move[i].x1*c;
b=y+Move[i].y1*c; //走c步停下
if(a>=0&&a<n&&b>=0&&b<n&&g[a][b]>g[x][y])
{
dfs(a,b);
MAX=max(MAX,dp[a][b]);
}
}
}
dp[x][y]=g[x][y]+MAX;
return dp[x][y];
}
int main()
{
int i,j;
while(cin>>n>>k)
{
ans=-1;
memset(dp,0,sizeof(dp));
if(n==-1&&k==-1)
{
break;
}
else
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>g[i][j];
}
}
cout<<dfs(0,0)<<endl;
}
}
return 0;
}