动态规划算法
文章平均质量分 91
有关动态规划算法的介绍和例题
我要满血复活
厦门大学计算机科学与技术学生,简单记录学习路程
展开
-
动态规划算法:斐波那契数列模型
解法(动态规划)算法流程1.状态表⽰:这道题可以「根据题⽬的要求」直接定义出状态表⽰: dp[i] 表⽰:第i个泰波那契数的值。2.状态转移⽅程:题⽬已经⾮常贴⼼的告诉我们了:3.初始化:从我们的递推公式可以看出,dp[i]在i = 0以及i = 1的时候是没有办法进⾏推导的,因为 dp[-2]或dp[-1]不是⼀个有效的数据。因此我们需要在填表之前,将 0, 1, 2位置的值初始化。题⽬中已经告诉我们4.填表顺序:毫⽆疑问是「从左往右」。5.原创 2024-05-05 17:11:30 · 847 阅读 · 0 评论 -
动态规划算法:路径问题
解法(动态规划):算法思路:1.状态表⽰:对于这种「路径类」的问题,我们的状态表⽰⼀般有两种形式:i.从 [i, j]位置出发,巴拉巴拉;ii.从起始位置出发,到达 [i, j]位置,巴拉巴拉。这⾥选择第⼆种定义状态表⽰的⽅式:dp[i][j]表⽰:⾛到[i, j]位置处,⼀共有多少种⽅式。2.状态转移⽅程:简单分析⼀下。如果dp[i][j]表⽰到达[i, j]位置的⽅法数,那么到达 [i, j] 位置之前的⼀⼩步,有两种情况:i.原创 2024-05-06 22:09:24 · 1009 阅读 · 0 评论 -
动态规划算法:简单多状态问题
解法(动态规划):算法思路:1.状态表⽰:对于简单的线性dp,我们可以⽤「经验 + 题⽬要求」来定义状态表⽰:i.以某个位置为结尾,巴拉巴拉;ii.以某个位置为起点,巴拉巴拉。这⾥我们选择⽐较常⽤的⽅式,以某个位置为结尾,结合题⽬要求,定义⼀个状态表⽰:dp[i]表⽰:选择到i位置时,此时的最⻓预约时⻓。但是我们这个题在 i位置的时候,会⾯临「选择」或者「不选择」两种抉择,所依赖的状态需要细分:▪。原创 2024-05-07 21:40:51 · 750 阅读 · 0 评论 -
动态规划算法:⼦数组、⼦串系列(数组中连续的⼀段)
解法(动态规划):算法思路:1.状态表⽰:对于线性dp,我们可以⽤「经验 + 题⽬要求」来定义状态表⽰:i.以某个位置为结尾,巴拉巴拉;ii.以某个位置为起点,巴拉巴拉。这⾥我们选择⽐较常⽤的⽅式,以「某个位置为结尾」,结合「题⽬要求」,定义⼀个状态表⽰:dp[i]表⽰:以i位置元素为结尾的「所有⼦数组」中和的最⼤和。2.状态转移⽅程:dp[i]的所有可能可以分为以下两种:i.⼦数组的⻓度为 1 :此时 dp[i] = nums[i];ii.原创 2024-05-12 12:32:39 · 306 阅读 · 0 评论 -
动态规划算法:⼦序列问题(数组中不连续的⼀段)
解法(动态规划):算法思路:1.状态表⽰:对于线性dp,我们可以⽤「经验 + 题⽬要求」来定义状态表⽰:i.以某个位置为结尾,巴拉巴拉;ii.以某个位置为起点,巴拉巴拉。这⾥我们选择⽐较常⽤的⽅式,以某个位置为结尾,结合题⽬要求,定义⼀个状态表⽰:dp[i]表⽰:以i位置元素为结尾的「所有⼦序列」中,最⻓递增⼦序列的⻓度。2.状态转移⽅程:对于 dp[i] ,我们可以根据「⼦序列的构成⽅式」,进⾏分类讨论:i.原创 2024-05-15 20:20:36 · 429 阅读 · 0 评论 -
动态规划算法:回文子串问题
解法(动态规划):算法思路:我们可以先「预处理」⼀下,将所有⼦串「是否回⽂」的信息统计在dp 表⾥⾯,然后直接在表⾥⾯统计 true的个数即可。1.状态表⽰:为了能表⽰出来所有的⼦串,我们可以创建⼀个n * n的⼆维dp 表,只⽤到「上三⻆部分」即可。其中, dp[i][j]表⽰:s字符串[i, j]的⼦串,是否是回⽂串。2.状态转移⽅程:对于回⽂串,我们⼀般分析⼀个「区间两头」的元素:i.当 s[i]!原创 2024-05-19 19:34:04 · 656 阅读 · 0 评论 -
动态规划算法:两个数组的 dp (含字符串数组)
解法(动态规划):算法思路:1.状态表⽰:对于两个数组的动态规划,我们的定义状态表⽰的经验就是:i.选取第⼀个数组 [0, i]区间以及第⼆个数组[0, j]区间作为研究对象;ii.结合题⽬要求,定义状态表⽰。在这道题中,我们根据定义状态表⽰为:dp[i][j]表⽰:s1的[0, i]区间以及s2的[0, j]区间内的所有的⼦序列中,最⻓公共⼦序列的⻓度。2.状态转移⽅程:分析状态转移⽅程的经验就是根据「最后⼀个位置」的状况,分情况讨论。对于。原创 2024-06-01 16:50:02 · 573 阅读 · 0 评论 -
动态规划算法:背包问题
背包问题概述背包问题概述背包问题 (Knapsack problem) 是⼀种组合优化的NP完全问题。问题可以描述为:给定⼀组物品,每种物品都有⾃⼰的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最⾼。根据物品的个数,分为如下⼏类:•01 背包问题:每个物品只有⼀个•完全背包问题:每个物品有⽆限多个•多重背包问题:每件物品最多有 si 个•混合背包问题:每个物品会有上⾯三种情况......•。原创 2024-06-02 18:51:22 · 2935 阅读 · 0 评论