HDU 1078 FatMouse and Cheese (记忆化搜索+dp)

时间:2023-03-08 21:08:23

详见代码

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <memory.h>
using namespace std;
const int inf=0x3f3f3f3f;
int a[][];
int dp[][];//表示到i,j的最大路径和
int dir[][]= {,,-,,,,,-};
int n,m;
int dfs(int x,int y)
{
int ans=;
if(!dp[x][y])
{
for(int i=; i<=m; i++)
{
for(int j=; j<; j++)
{
int xx=x+dir[j][]*i;
int yy=y+dir[j][]*i;
if(xx<||xx>n||yy<||yy>n)
{
continue;
}
if(a[xx][yy]>a[x][y])
{
ans=max(ans,dfs(xx,yy));
}
}
}
dp[x][y]=ans+a[x][y];
}
return dp[x][y];
}
int main()
{
// int n,m;
while(~scanf("%d%d",&n,&m),n>&&m>)
{
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
scanf("%d",&a[i][j]);
}
}
memset(dp,,sizeof(dp));
printf("%d\n",dfs(,));
}
return ;
}