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

Posted Yeader

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1078 FatMouse and Cheese(记忆化搜索DP)相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078

题目大意:一个n*n的图,每个点都有奶酪,老鼠从(0,0)开始走,每次最多只能走k步就要停下来,停下的这个位置的奶酪数只能比上一个停留的位置大,并获取其奶酪,每次只能水平或垂直走,问最多能得到的奶酪。

解题思路:记忆化搜索,这方面还是写的太少,还要看别人才会,这个就当个例子参考吧。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=1e2+5;
 6 int a[N][N],dp[N][N];
 7 int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
 8 int n,k;
 9 
10 int dfs(int x,int y){
11     int res=0;
12     if(dp[x][y]) return dp[x][y];
13     for(int i=0;i<4;i++){
14         for(int j=1;j<=k;j++){
15             int xx=x+d[i][0]*j;
16             int yy=y+d[i][1]*j;
17             if(xx<1||xx>n||yy<1||yy>n)
18                 continue;
19             if(a[xx][yy]>a[x][y])
20                 res=max(res,dfs(xx,yy));
21         }
22     }
23     dp[x][y]=res+a[x][y];
24     return dp[x][y];
25 }
26 
27 int main(){
28     while(~scanf("%d%d",&n,&k)){    
29         if(n==-1&&k==-1)
30             break;
31         memset(dp,0,sizeof(dp));
32         for(int i=1;i<=n;i++){
33             for(int j=1;j<=n;j++){
34                 scanf("%d",&a[i][j]);
35             }
36         }
37         printf("%d\n",dfs(1,1));
38     }
39     return 0;
40 } 

 

以上是关于HDU 1078 FatMouse and Cheese(记忆化搜索DP)的主要内容,如果未能解决你的问题,请参考以下文章

hdu 1078 FatMouse and Cheese

HDU1078:FatMouse and Cheese

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

HDU1078 FatMouse and Cheese —— 记忆化搜索

hdu 1078 FatMouse and Cheese(记忆化搜索)

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