HDU 1078 FatMouse and Cheese

本文介绍了记忆化搜索的概念,并通过实例代码展示了如何在搜索问题中应用记忆化搜索技术,提高搜索效率。主要内容包括定义搜索方向,初始化数据结构,以及递归实现搜索过程。实例代码覆盖了基本框架和关键逻辑,旨在帮助读者理解和实践记忆化搜索。

记忆化搜索,第一次做搜索,好好学习下!

dir保存了搜索的四个方向,下右上左

这里还懵懵懂懂的,现将模板记下来。=_=!!

 

 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 105;
 8 int map[maxn][maxn], dp[maxn][maxn];
 9 int dir[] = {1,0, 0,1, -1,0, 0,-1};
10 int n, k;
11 
12 int dfs(int x, int y)
13 {
14     if(dp[x][y] != -1)
15         return dp[x][y];
16     int xx, yy, mmax = 0;
17     for(int t = 1; t <= k; ++t)
18     {
19         for(int i = 0; i < 8;)
20         {
21             xx = x + t*dir[i++];
22             yy = y + t*dir[i++];
23             if(xx>=1 && yy>=1 && xx<=n && yy<=n 
24                 && map[xx][yy] > map[x][y])
25                 mmax = max(mmax, dfs(xx, yy));
26         }
27     }
28     return dp[x][y] = map[x][y] + mmax;
29 }
30 
31 int main(void)
32 {
33     #ifdef LOCAL
34         freopen("1078in.txt", "r", stdin);
35     #endif
36     
37     while(scanf("%d%d", &n, &k) && (n+k+2))
38     {
39         memset(dp, -1, sizeof(dp));
40         for(int i = 1; i <= n; ++i)
41             for(int j = 1; j <= n; ++j)
42                 scanf("%d", &map[i][j]);
43         printf("%d\n", dfs(1, 1));
44     }
45     return 0;
46 }
代码君

 

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/3881360.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值