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

本文介绍了一个使用深度优先搜索(DFS)算法解决二维数组中寻找从起点到终点的最大路径和问题的C++实现。通过动态规划记录已计算的最大路径和,避免重复计算,提高效率。

详见代码

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <memory.h>
 5 using namespace std;
 6 const int inf=0x3f3f3f3f;
 7 int a[110][110];
 8 int dp[110][110];//表示到i,j的最大路径和
 9 int dir[4][2]= {1,0,-1,0,0,1,0,-1};
10 int n,m;
11 int dfs(int x,int y)
12 {
13     int ans=0;
14     if(!dp[x][y])
15     {
16         for(int i=1; i<=m; i++)
17         {
18             for(int j=0; j<4; j++)
19             {
20                 int xx=x+dir[j][0]*i;
21                 int yy=y+dir[j][1]*i;
22                 if(xx<1||xx>n||yy<1||yy>n)
23                 {
24                     continue;
25                 }
26                 if(a[xx][yy]>a[x][y])
27                 {
28                     ans=max(ans,dfs(xx,yy));
29                 }
30             }
31         }
32         dp[x][y]=ans+a[x][y];
33     }
34     return dp[x][y];
35 }
36 int main()
37 {
38 //    int n,m;
39     while(~scanf("%d%d",&n,&m),n>0&&m>0)
40     {
41         for(int i=1; i<=n; i++)
42         {
43             for(int j=1; j<=n; j++)
44             {
45                 scanf("%d",&a[i][j]);
46             }
47         }
48         memset(dp,0,sizeof(dp));
49         printf("%d\n",dfs(1,1));
50     }
51     return 0;
52 }
View Code

 

转载于:https://www.cnblogs.com/ITUPC/p/5294372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值