算法:动态规划

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博客

相关推荐
妄想出头的工业炼药师1 小时前
激光雷达点云退化多地图会话
算法·开源
Brilliantwxx2 小时前
【C++】 深入理解红黑树:实现与原理全解
数据结构·c++·笔记·算法·青少年编程·红黑树
人道领域2 小时前
【LeetCode刷题日记】108.将有序数组转换为二叉搜索树
java·算法·leetcode
Dlrb12112 小时前
数据结构-排序算法
数据结构·算法·排序算法·插入排序·堆排序·希尔排序·快速排序
过期动态2 小时前
【LeetCode 热题 100】无重复字符的最长子串
java·数据结构·spring boot·算法·leetcode·职场和发展
莫等闲-3 小时前
leetcode42. 接雨水 leetcode84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
unicrom_深圳市由你创科技3 小时前
历史数据存储量太大,怎么处理?数据压缩/归档策略?
算法
浅念-3 小时前
LeetCode 记忆化搜索 刷题总结
数据结构·算法·leetcode·职场和发展·深度优先·dfs
菜菜的顾清寒3 小时前
力扣HOT100(44)对称二叉树
数据结构·算法·leetcode