首页 > 代码库 > [HDU 1078]FatMouse and Cheese(记忆化DFS)
[HDU 1078]FatMouse and Cheese(记忆化DFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078
题目大意:一个胖老鼠要在一个n*n大小的棋盘里吃奶酪,这个老鼠每一步最多能走k单位远,而且每走一步,必须走到比当前点奶酪数多的点那去。告诉你这个棋盘里每个点上的奶酪个数,求这个老鼠最多能吃多少奶酪。
思路:类似于棋盘DP的记忆化DFS,直接搜加记忆答案就可以了。
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #define MAXN 120 using namespace std; int map[MAXN][MAXN]; int f[MAXN][MAXN]; int xx[]={1,-1,0,0},yy[]={0,0,1,-1}; int n,k; int max(int a,int b) { if(a>b) return a; return b; } bool inMap(int x,int y) { if(x<1||x>n||y<1||y>n) return false; return true; } int dfs(int x,int y) { if(f[x][y]) return f[x][y]; int ans=0; for(int dist=1;dist<=k;dist++) for(int dir=0;dir<4;dir++) { int newx=x+xx[dir]*dist,newy=y+yy[dir]*dist; if(inMap(newx,newy)) if(map[newx][newy]>map[x][y]) ans=max(ans,dfs(newx,newy)); } ans+=map[x][y]; return f[x][y]=ans; } int main() { while(scanf("%d%d",&n,&k)&&n!=-1&&k!=-1) { memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&map[i][j]); printf("%d\n",dfs(1,1)); } return 0; }
[HDU 1078]FatMouse and Cheese(记忆化DFS)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。