#include<bits/stdc++.h>
using namespace std;
int n,k;
int init[102][102];//当前奶酪数
int ans[102][102];//当前出发的最优解
int to[4][2]={0,1,0,-1,1,0,-1,0};//可走方向
bool ok(int x,int y){
if(x<0||x>=n||y<0||y>=n) return false;
return true;
}
int dfs(int x,int y){//从(x,y)开始
int answer=0;
if(ans[x][y]) return ans[x][y];
for(int i=0;i<4;i++){
for(int j=1;j<=k;j++){//最多不超过k步
int xx=x+to[i][0]*j;
int yy=y+to[i][1]*j;
if(ok(xx,yy)&&init[xx][yy]>init[x][y])
answer=max(answer,dfs(xx,yy));
}
}
ans[x][y]=answer+init[x][y];
return ans[x][y];
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF){
if(n==-1&&k==-1) break;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&init[i][j]);
}
}
memset(ans,0,sizeof ans);//第一遍未初始化,WA了
printf("%d\n",dfs(0,0));
}
return 0;
}
hdu1078记忆化dfs
最新推荐文章于 2021-07-21 20:45:14 发布