/*dp 记忆化搜索*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define max(a,b) a>b?a:b
using namespace std;
int n,k;
int map[101][101];
int dp[101][101];
int fx[4][2]={-1,0,0,1,0,-1,1,0};
bool isValide(int x,int y)
{
if(x<1||x>n||y<1||y>n)
return false;
return true;
}
void dfs(int x,int y)
{
int t=0;
if(dp[x][y])
{
return;
}
else
{
for(int i=0;i<4;i++)
{
for(int j=1;j<=k;j++)
{
if(isValide(x+fx[i][0]*j,y+fx[i][1]*j))
{
if(map[x][y]>=map[x+fx[i][0]*j][y+fx[i][1]*j])
continue;
dfs(x+fx[i][0]*j,y+fx[i][1]*j);
t=max(t,dp[x+fx[i][0]*j][y+fx[i][1]*j]);
}
}
}
dp[x][y]=t+map[x][y];
return;
}
}
int main()
{
freopen("test.txt","r",stdin);
while(scanf("%d%d",&n,&k)&&n!=-1)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&map[i][j]);
dp[i][j]=0;
}
}
dfs(1,1);
printf("%d\n",dp[1][1]);
}
}
hdu 1078 FatMouse and Cheese(dp 记忆化搜索)
最新推荐文章于 2024-05-25 16:46:34 发布