递归、搜索与回溯算法:记忆化搜索

例题一


解法(暴搜 -> 记忆化搜索 -> 动态规划):
算法思路:
暴搜:
a. 递归含义:给 dfs ⼀个使命,给他⼀个数 n ,返回第 n 个斐波那契数的值;
b. 函数体:斐波那契数的递推公式;
c. 递归出⼝:当 n == 0 或者 n == 1 时,不⽤套公式。
记忆化搜索:
a. 加上⼀个备忘录;
b. 每次进⼊递归的时候,去备忘录⾥⾯看看;
c. 每次返回的时候,将结果加⼊到备忘录⾥⾯。
动态规划:
a. 递归含义 -> 状态表⽰;
b. 函数体 -> 状态转移⽅程;
c. 递归出⼝ -> 初始化。
法一:记忆化搜索

法二:动态规划

例题二


解法(暴搜 -> 记忆化搜索 -> 动态规划):
算法思路:
暴搜:
a. 递归含义:给 dfs ⼀个使命,给他⼀个下标,返回从 0, 0 位置⾛到 i, j 位置⼀共有多少种⽅法;
b. 函数体:只要知道到达上⾯位置的⽅法数以及到达左边位置的⽅法数,然后累加起来即可;
c. 递归出⼝:当下标越界的时候返回 0 ;当位于起点的时候,返回 1 。
记忆化搜索:
a. 加上⼀个备忘录;
b. 每次进⼊递归的时候,去备忘录⾥⾯看看;
c. 每次返回的时候,将结果加⼊到备忘录⾥⾯。
动态规划:
a. 递归含义 -> 状态表⽰;
b. 函数体 -> 状态转移⽅程;
c. 递归出⼝ -> 初始化。
方法一:记忆化搜索

方法二:动态规划

例题三


解法(暴搜 -> 记忆化搜索 -> 动态规划):
算法思路:
暴搜:
a. 递归含义:给 dfs ⼀个使命,给他⼀个数 i ,返回以 i 位置为起点的最⻓递增⼦序列的⻓度;
b. 函数体:遍历 i 后⾯的所有位置,看看谁能加到 i 这个元素的后⾯。统计所有情况下的最⼤值。
c. 递归出⼝:因为我们是判断之后再进⼊递归的,因此没有出⼝~
记忆化搜索:
a. 加上⼀个备忘录;
b. 每次进⼊递归的时候,去备忘录⾥⾯看看;
c. 每次返回的时候,将结果加⼊到备忘录⾥⾯。
动态规划:
a. 递归含义 -> 状态表⽰;
b. 函数体 -> 状态转移⽅程;
c. 递归出⼝ -> 初始化。
解法一:记忆化搜索

解法二:动态规划

例题四


解法(暴搜 -> 记忆化搜索):
算法思路:
暴搜:
a. 递归含义:给 dfs ⼀个使命,给他⼀个区间 left, right ,返回在这个区间上能完胜的最⼩费⽤;
b. 函数体:选择 left, right 区间上的任意⼀个数作为头结点,然后递归分析左右⼦树。
求出所有情况下的最⼩值;
c. 递归出⼝:当 left >= right 的时候,直接返回 0 。
记忆化搜索:
a. 加上⼀个备忘录;
b. 每次进⼊递归的时候,去备忘录⾥⾯看看;
c. 每次返回的时候,将结果加⼊到备忘录⾥⾯。

例题五


解法(暴搜 -> 记忆化搜索 ):
算法思路:
暴搜:
a. 递归含义:给 dfs ⼀个使命,给他⼀个下标 i, j ,返回从这个位置开始的最⻓递增路径的⻓度;
b. 函数体:上下左右四个⽅向瞅⼀瞅,哪⾥能过去就过去,统计四个⽅向上的最⼤⻓度;
c. 递归出⼝:因为我们是先判断再进⼊递归,因此没有出⼝~
记忆化搜索:
a. 加上⼀个备忘录;
b. 每次进⼊递归的时候,去备忘录⾥⾯看看;
c. 每次返回的时候,将结果加⼊到备忘录⾥⾯。

相关推荐
先吃饱再说8 小时前
判断回文字符串,从一行代码到双指针优化
算法
黄敬峰11 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术12 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六16 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术16 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize17 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队1 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode