?
题意:老鼠在n*n的每个方格上放置了奶酪,初始位置在(0,0),每次只能移动小于等于k的位置,并且移动后的位置的奶酪数要比当前位置的奶酪数多,问老鼠能得到的最多奶酪数是多少。
思路:典型的记忆化搜索,记忆化搜索=搜索的形式+dp的思想, 记忆化搜索的思想是,在搜索过程中,会有很多重复计算,如果我们能记录一些状态的答案,就可以减少重复搜索量
记忆化搜索是类似于动态规划的,不同的是,它是倒做的“递归式动态规划”。所以只要另外开一个数组表示当前点能达到的最优解,dp[i][j]=map[i][j]+max,
#include
#define max(a,b) (a>b?a:b)
#define N 101
int map[N][N],h[N][N],n,k;
int dir[4][2]={-1,0,0,1,0,-1,1,0};
bool check(int x,int y)
{
if(x>=0&&x
=0&&y
t) { cnt=dfs(xx,yy); sum=max(sum,cnt); } } } return h[x][y]=map[x][y]+sum; } int main() { while(scanf(%d%d,&n,&k)!=EOF&&n!=-1&&k!=-1) { for(int i=0;i
?