算法:动态规划

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

相关推荐
Code_Solitude12 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司13 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
YLCHUP15 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
思麟呀15 小时前
背包DP(01背包+完全背包)
c++·算法
笑容掩饰我的失落16 小时前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件
算法·区块链·php·智能合约·哈希算法
Pniubi17 小时前
力扣24. 两两交换链表中的节点(递归)
算法·leetcode·链表
꧁细听勿语情꧂18 小时前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
俊俊几年的19 小时前
动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100
linux·c++·算法·leetcode·嵌入式·动态规划·c
小雉系统1 天前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构