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

例题一


解法(暴搜 -> 记忆化搜索 -> 动态规划):
算法思路:
暴搜:
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. 每次返回的时候,将结果加⼊到备忘录⾥⾯。

相关推荐
眼镜哥(with glasses)1 小时前
蓝桥杯 国赛2024python(b组)题目(1-3)
数据结构·算法·蓝桥杯
int型码农6 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT6 小时前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面6 小时前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked936 小时前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,6 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
积极向上的向日葵6 小时前
有效的括号题解
数据结构·算法·
GIS小天6 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
_Itachi__7 小时前
LeetCode 热题 100 74. 搜索二维矩阵
算法·leetcode·矩阵
不忘不弃7 小时前
计算矩阵A和B的乘积
线性代数·算法·矩阵