算法:动态规划

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

相关推荐
怕浪猫4 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i6 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J6 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
weixin_307779137 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
朝朝辞暮i8 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
朝朝辞暮i8 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法
Godspeed Zhao9 小时前
现代智能雷达技术14——算法(0)
线性代数·算法·雷达
可乐ea9 小时前
Agent 模型分级升级路由:用置信度阈值把贵模型省下来
人工智能·算法·机器学习·结构化输出·置信度路由·模型升级路由·大模型成本优化
Navigator_Z9 小时前
LeetCode //C - 1278. Palindrome Partitioning III
c语言·算法·leetcode
Godspeed Zhao9 小时前
现代智能雷达技术18——算法(4)
算法