算法:动态规划

1.过渡:记忆化搜索过度动态规划

动态规划分为两种:

1.递归DP:使用记忆化搜索等方法,自顶向下进行递归解题

2.递推DP:使用循环与状态转移方程,自底向上进行递推解题

动态规划五步骤:

1.确定状态表示:给dp数组赋予一个含义

2.确定状态转移方程:将当前格子如何由其他格子推导出来的方程求出

3.初始化:将初始情况填上,比如斐波那契数列中的第一和第二个值

4.确定填表顺序:根据题意和方程确定按照什么顺序填值

5.确定最终结果:根据计算结果和题意得出最终结果

例题:

1.算法题(197):下楼梯(动态规划)_下楼梯动态规划c++-CSDN博客

2.算法题(198):数字三角形-CSDN博客

2.线性dp

**特点:**状态只依赖于前一个或者前几个状态,状态之间的关系是线性的,通常可以用一维或者二维数组存储

2.1基础线性dp

例题:

1.算法题(199):台阶问题_算法 上台阶-CSDN博客

2.算法题(200):最大子段和(动态规划)_用动态规划法 求最大子段和 练习题-CSDN博客

3.算法题(201):传球游戏_c++传球游戏答案-CSDN博客

4.算法题(202):乌龟棋_csp乌龟棋动态规划-CSDN博客

2.2路径类dp

是线性dp的一种,在一个n*m的矩阵中设置一个行走规则,研究从起点走到终点的方案数,最大路径和或最小路径和

例题:

1.算法题(203):矩阵最小路径和_走矩阵从(1,1) 走到(n,n),每条路径上最的值相比最小的路径值-CSDN博客

2.算法题(204):迷雾森林-CSDN博客

3.算法题(205):过河卒_过河卒 算法-CSDN博客

2.3经典线性dp

主要是最长上升子序列和最长公共子序列

算法题(207):最长上升子序列(经典线性dp题)_最长上升子序列练习题-CSDN博客

算法题(209):合唱队形-CSDN博客

3.算法题(210):最长公共子序列(动态规划)_计算最长公共子序列 并输出最长公共序列-CSDN博客

4.算法题(211):编辑距离_算法题,编辑距离-CSDN博客

3.背包问题

**场景:**给定一组物品,每个物品有各自的体积和价值,在不超过背包体积的情况下,使得背包中的物品价值最大

3.1 01背包

例题:

1.算法题(212):01背包-CSDN博客

2.算法题(213):采药_采药算法题原题-CSDN博客

3.2 完全背包

**完全背包:**n种物品,每一种物品的个数是无限多的,要求满足背包/时间要求的前提下,使背包物品价值最大

**核心:**需要记住如何推导状态转移方程,在可任意数量选择物品的情况下

分三种类型:

小于等于,恰好等于,大于等于

其中小于等于的初始化都为0即可

恰好等于可能存在非法情况,要按需初始化为正无穷或负无穷,多数为负无穷(求max)

大于等于情况下,有可能存在非法情况,也要按需初始化为正无穷或负无穷

多数为正无穷(求min),还需要注意由于dp数组下标不可为0,存在部分情况数组映射

例题:

1.算法题(216):完全背包-CSDN博客

2.算法题(217):疯狂采药-CSDN博客

3.算法题(218):买干草-CSDN博客

3.3 多重背包

应用场景:物品限量但是不全为1的背包问题

注意:由于物品限量,不一定可以让整个背包超重,所以不能使用完全背包的优化方程

解决方案:状态转移方程直接根据物品的限量数进行for循环遍历计算即可

例题:

1.算法题(220):多重背包(一)-CSDN博客

2.算法题(222):摆花_算法题大小花盆怎么做-CSDN博客

3.4 分组背包

**场景:**物品具有小组特性,一个小组的物品只能选择一个

注意:状态转移表示中,第一个参数表示的是组,而不是单独的物品,因为组内存在互斥

例题:

1.算法题(223):分组背包-CSDN博客

4.区间dp

**核心思想:**将大区间划分为小区间

**注意:**区间dp的遍历方式是特殊的,第一层是len从1~n,第二层是左端点从2~n-len+1

应用场景:涉及两端的变化的情况

模板题:

1.算法题(227):回文字符串-CSDN博客

例题:

1.算法题(228):treats for the cows-CSDN博客

相关推荐
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack201 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫3 天前
Electron 系列文章封面图
算法·架构·前端框架