![](https://img-blog.csdnimg.cn/2290d9021ec4450792490baab8112469.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
动态规划
文章平均质量分 89
动态规划原理分析+应用
呵呵哒( ̄▽ ̄)"
喜欢分享学习笔记,并不一定是正确的,阶段性的学习成果做一下记录,欢迎一起交流讨论,也希望有错误的地方可以向我提出,我会虚心接受并纠正
展开
-
leetCode 131.分割回文串 + 动态规划 + 回溯算法 + 优化 + 图解 + 笔记
leetCode 647.回文子串 动态规划 + 优化空间 / 中心扩展法 + 双指针-CSDN博客。leetCode 131.分割回文串 + 回溯算法 + 图解 + 笔记-CSDN博客。代码随想录 (programmercarl.com)(一)利用动态规划来优化判断回文子串。整个字符串它就是回文子串。如果只判断这个字符串的。讲究的是这个字符串里边。原创 2023-11-30 13:51:28 · 1169 阅读 · 0 评论 -
leetCode 416.分割等和子集 + 01背包 + 动态规划 + 记忆化搜索 + 递推 + 空间优化
LeetCode 416.分割等和子集(动态规划【0-1背包问题】采用一维数组dp:滚动数组)_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。利用memset 赋值无穷大和无穷小_如何使用memset函数初始化数组的值为无穷小_Prudento的博客-CSDN博客。0-1背包 完全背包 + 至多/恰好/至少 + 空间优化 + 常见变形题(实战力扣题)-CSDN博客。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。,这是解决动态规划问题的关键。:根据递归的边界来初始化。(3)1:1 翻译成。原创 2023-11-04 22:40:40 · 244 阅读 · 0 评论 -
leetCode 322.零钱兑换 完全背包 + 动态规划 + 记忆化搜索 + 递推 + 空间优化 + 画递归树
在上面的递归树中,可以看到有许多子问题被多次计算。例如,F(1)被计算了13次。为了避免重复的计算,可以将每个子问题的答案存在一个数组中进行记忆化,如果下次还要计算这个问题的值直接从数组中取出返回即可,这样能保证每个子问题最多只被计算一次。0-1背包 完全背包 + 至多/恰好/至少 + 空间优化 + 常见变形题(实战力扣题)-CSDN博客。LeetCode 322.零钱兑换 完全背包 + 动态规划_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。最优解可以从其子问题的最优解构造出来。,这是解决动态规划问题的关键。原创 2023-11-04 16:26:34 · 222 阅读 · 0 评论 -
leetCode 494. 目标和 + 动态规划 + 记忆化搜索 + 递推 + 空间优化
LeetCode 494.目标和 (动态规划 + 性能优化)二维数组 压缩成 一维数组_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。返回可以通过上述方法构造的、运算结果等于 target。,然后串联起所有整数,可以构造一个。向数组中的每个整数前添加 '+'和一个整数 target。原创 2023-11-04 12:39:09 · 200 阅读 · 0 评论 -
0-1背包 完全背包 + 至多/恰好/至少 + 空间优化 + 常见变形题(实战力扣题)
LCR 166.珠宝的最高价值 + 动态规划 + 记忆化搜索 + 递推 + 空间优化-CSDN博客。返回可以通过上述方法构造的、运算结果等于 target。种方案,刚好这种写法可以从 1 开始,算出来。(这句话我听得迷迷糊糊的,有小伙伴懂得指导我一下。,表示不同面额的硬币;计算并返回可以凑成总金额所需的。如果没有任何一种硬币组合能组成总金额,返回。,然后串联起所有整数,可以构造一个。向数组中的每个整数前添加 '+'你可以认为每种硬币的数量是。(2)1:1 翻译成递推。(2)1:1 翻译成递推。原创 2023-11-03 21:23:38 · 374 阅读 · 0 评论 -
LCR 166.珠宝的最高价值 + 动态规划 + 记忆化搜索 + 递推 + 空间优化
除非这个架子上没有任何珠宝,比如 frame = [[0]]LCR 166. 珠宝的最高价值 - 力扣(LeetCode)解决方案:在 f 数组的上边和左边各加一排,的珠宝架,其中 frame[i][j]为该位置珠宝的价值。(2)递归搜索 + 保存计算结果 =由于每个状态只会计算一次,状态个数为。现有一个记作二维矩阵 frame。注意:珠宝的价值都是。,单个状态的计算时间为。原创 2023-11-03 19:35:52 · 279 阅读 · 0 评论 -
leetCode 213. 打家劫舍 II + 动态规划 + 从记忆化搜索到递推 + 空间优化
leetCode 213. 打家劫舍 II 动态规划 房间连成环怎么偷呢?_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。leetCode 198.打家劫舍 动态规划 + 优化空间复杂度_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,leetCode 198.打家劫舍 动态规划入门:从记忆化搜索到递推-CSDN博客。原创 2023-11-02 23:00:34 · 290 阅读 · 0 评论 -
leetCode 746. 使用最小花费爬楼梯 + 记忆化搜索 + 递推 + 动态规划 + 空间优化
LeetCode 70.爬楼梯 + 记忆化搜索 + 递推 + 动态规划 + 空间优化-CSDN博客。leetCode 198.打家劫舍 动态规划入门:从记忆化搜索到递推-CSDN博客。leetCode 746. 使用最小花费爬楼梯 动态规划-CSDN博客。leetCode 746. 使用最小花费爬楼梯 动态规划-CSDN博客。(2)递归搜索 + 保存计算结果 = 记忆化搜索。(3)1:1 翻译成递推。(1) 递归(超时)原创 2023-11-02 22:56:53 · 165 阅读 · 0 评论 -
LeetCode 70.爬楼梯 + 记忆化搜索 + 递推 + 动态规划 + 空间优化
leetCode 70.爬楼梯 动态规划_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。(2)递归搜索 + 保存计算结果 = 记忆化搜索。(3)1:1 翻译成递推。(1) 递归(超时)原创 2023-11-02 22:07:02 · 162 阅读 · 0 评论 -
leetCode 2915. 和为目标值的最长子序列的长度 + 动态规划 +01背包 + 空间优化 + 记忆化搜索 + 递推
指的是从原数组中删除一些或者不删除任何元素后,剩余元素保持原来的顺序构成的数组。leetCode 198.打家劫舍 动态规划入门:从记忆化搜索到递推-CSDN博客。2915. 和为目标值的最长子序列的长度 - 力扣(LeetCode)这样就可以先将子问题解决掉,然后反过来解决较大的子问题。动态规划入门:从记忆化搜索到递推_哔哩哔哩_bilibili。来再次找到子子问题与子问题的联系。,确定子问题与原问题的联系。子问题又可以通过同样的。116双周赛T3复盘_哔哩哔哩_bilibili。原创 2023-11-02 18:25:46 · 372 阅读 · 0 评论 -
leetCode 198.打家劫舍 动态规划入门:从记忆化搜索到递推
选 或 不选选哪个对于这个题,先把它看做是一道回溯题要把一个大问题变成一个规模更小的子问题,从第一个房子或者最小一个房子开始思考,是最容易的,因为它们受到的约束是最小的。比如考虑最后一个房子「选」还是「不选」,如果「不选」,那么问题就变成个房子的问题。如果选,问题就变成个房子的问题,不断这样去思考,就可以得到一棵搜索树了。(二)回溯由于在选的情况下,相邻的房子是不能选的,所以这里直接递归到个房子,把刚才的思考过程再抽象一下:当我们枚举到第个房子「选」或「不选」的时候,就确定了递归参数中的。原创 2023-11-02 14:07:12 · 393 阅读 · 0 评论 -
AcWing 1.2.1 最长上升子序列模型 + 动态规划 + 图解(详细)
给定一个长度为 N 的整数序列。请你计算该序列的。上升子序列是指数值。原创 2023-10-28 00:03:08 · 799 阅读 · 0 评论 -
AcWing 1.1 数字三角形模型 dp动态规划
第一个为行号数,第二个为列号数,第三个为在该行、该列上所放的数,个单位时间穿越出去。而在经过中间的每个小方格时,都需要缴纳一定的费用。的正方形的网格,去参加一个非常重要的商务活动。在走过的路上,他可以取走方格中的数(取走后的方格中奖变为数字0)。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,那它们走到同一个格子的时候,这两条路线走过的总步数是一样的。,试找出两条这样的路径,使得取得的数字和为最大。(k表示两条路线当前走到的格子的横纵坐标之和)输出一个整数,表示两条路径上取得的最大的和。原创 2023-10-26 21:16:51 · 192 阅读 · 0 评论 -
leetCode 392. 判断子序列 动态规划 + 优化空间 / 双指针 等多种解法
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。动态规划,用相似思路解决复杂问题 | LeetCode:392.判断子序列_哔哩哔哩_bilibili。中寻找某一个字符成功时,每一行的最后一个数值都等于当前的。在这种情况下,你会怎样改变代码?的一个子序列,而"aec",你需要依次检查它们是否为。观察此表格我们可以发现,当。(1)动态规划 二维dp。,那么相同子序列长度就在。所以下文代码中有一句。(2)二维dp 优化空间。(3)一维dp 优化空间。原创 2023-10-19 14:50:13 · 242 阅读 · 0 评论 -
leetCode 214.最短回文串 + KMP
你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。KMP 算法 + 详细笔记 + 核心分析 j = D[j-1]-CSDN博客。KMP substring search 算法 案例分析-CSDN博客。拼接也就可以获得最短的回文串。(这是因为回文串经过翻转还是本身)最长前缀是回文的,它翻转之后的。拼接也就可以获得最短的回文串。去掉最长公共前后缀,剩余的与。的最长后缀也是回文的,且。去掉最长回文后缀,剩余的与。可以发现 temp_s的。s 的最长回文前缀 和。原创 2023-10-18 22:49:58 · 188 阅读 · 0 评论 -
KMP 算法 + 运用前后缀信息 + 案例分析 + 实战力扣题
即 j = D[3-1] = D[2] = 0;此时 pattern[i] == pattern[j],即 a == a,匹配成功,此时记录D[i] = ++j;此时 pattern[i] == pattern[j],即 b == b,匹配成功,此时记录D[i] = ++j;此时 pattern[i] == pattern[j],即 c == c,匹配成功,此时记录D[i] = ++j;此时 pattern[i] == pattern[j],即 a == a,匹配成功,此时记录D[i] = ++j;原创 2023-10-18 17:16:22 · 264 阅读 · 0 评论 -
leetCode 5. 最长回文子串 动态规划 + 优化空间 / 中心扩展法 + 双指针
左边图是dp数组初始化,在填dp数组只会对右上三角进行数据更新,所以右边的图我就不画左下三角的0了。leetCode 647.回文子串 动态规划 + 优化空间 / 中心扩展法 + 双指针-CSDN博客。647. 回文子串 - 力扣(LeetCode)所以观察的时候可以瞄准这条线上的坐标,分析信息。,大家感兴趣可以看一下:。"aba" 同样是符合题意的答案。这样就可以知道一个回文子串的。2.动态规划 二维dp +是回文子串的信息记录在。是回文子串的信息记录在。是回文子串的信息记录在。原创 2023-10-17 23:13:58 · 233 阅读 · 0 评论 -
leetCode 647.回文子串 动态规划 + 优化空间 / 中心扩展法 + 双指针
左边图是dp数组初始化,在填dp数组只会对右上三角进行数据更新,所以右边的图我就不画左下三角的0了。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。动态规划,字符串性质决定了DP数组的定义 | LeetCode:647.回文子串_哔哩哔哩_bilibili。(2,3),(1,4),(0,5)在左对角线上,所以观察的时候可以瞄准这条线上的坐标,分析信息。6个回文子串: "a", "a", "a", "aa", "aa", "aaa"三个回文子串: "a", "b", "c"原创 2023-10-17 17:32:21 · 219 阅读 · 0 评论 -
KMP 算法 + 详细笔记 + 核心分析 j = D[j-1]
我们从刚刚已经计算好的 D数组(记录最大公共前后缀的长度)里发现,D[3]表示这前四个字母A所对应的最大公共前后缀的长度为3,P串拥有的最大公共前后缀也是3,可以看标注的串③ 和 串④;,它也是在做向前探索,可以去找一些复杂的例子感受一下,j是如何往前移动的,它可能不是一口气就移动到该去的位置的,它需要多次移动。如果说在匹配的过程中,在某个时间点,此时 i 指向的字符是 x ,j 指向的字符是 y ,此时匹配失败,着重看 串② 和 串③,通过刚才观察最大前后缀的部分,我们可以发现串② 和 串③ 是相等的。原创 2023-10-15 23:04:56 · 2524 阅读 · 2 评论 -
leetCode 1143.最长公共子序列 动态规划 + 图解
leetCode 1143.最长公共子序列 一步步思考动态规划 + 优化空间复杂度_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。leetCode 1143.最长公共子序列 动态规划 + 滚动数组-CSDN博客。比较这两个LCS谁最大,就选最大的LCS为最优解。且最长公共子序列有"BCAB" 和 "BDAB"我们可以从这张表格可以得到的信息,① 最长公共子序列有"BCAB"② 最长公共子序列有"BDAB"S2前 j-1 个字符。S1前 i-1个字符。S2前 j-1个字符。S1前 i-1个字符。原创 2023-10-15 12:39:46 · 240 阅读 · 0 评论 -
leetCode 72. 编辑距离 动态规划 + 滚动数组 + 优化空间
考虑它的最后一步,此题我们就考虑S1和S2的末尾字符是否相同,相同的话,我该怎么处理?对于此题也是一样,要么插入、要么删除、要么替换,在这三种方案里面选一个,编辑距离选一个代价最小的,就可以了!仅仅是S1的末尾字符是x,S2的末尾字符是y,只要把这个x换成y,就可以达到最优解!首先,对这个问题做一个定义,然后把这个问题进行分解。问题思考(O_O)?:如果我要进行插入操作,我是对谁进行操作?只要把这个1改一下,不要写1,把编辑代价加到对应的操作上即可!1.S1和S2的末尾字符相同,意味着可以剥离出去相同的。原创 2023-10-14 23:25:08 · 378 阅读 · 0 评论 -
01背包问题 : 二维dp数组 + 图文
解决0-1背包问题(方案一):二维dp数组_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。[轻松掌握动态规划]4.01背包_哔哩哔哩_bilibili。原创 2023-10-14 22:45:19 · 169 阅读 · 0 评论 -
leetCode 583.两个字符串的删除操作 动态规划 + 优化空间复杂度(二维dp、一维dp)
这个表格该怎么填呢,我们先按照左边的图标注好每个格子上面的字符串,然后依次手动计算该删除的字数,填入格子里。比如"se" 和 "e" ,要。嘻嘻,假设我们上文这些全都不会,那我们还想要知道递推式,还想用动态规划来解决此问题,那该怎么做呢?第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea",这样保证dp[i][j]可以根据之前计算出来的数值进行计算。以此类推,我们就可以得到下面的两张图的第一张表格。,"se" 和 "eat" ,要。,"se" 和 "ea" ,要。原创 2023-10-13 22:56:56 · 319 阅读 · 0 评论 -
leetCode 115.不同的子序列 动态规划 + 滚动数组(优化)
于是我开始反推,把dp数组打印出来,然后思考其表示的含义,接着在一步步地思考,知道了如何填表格的原理。注意:可以去掉一个=,是因为dp[n][1-m]可以由递推式推出,即左上方和上方的值推出,而dp[n][0]这个值用不到,所以可以省去这个初始化!提供另一种思路:以s:"heeeheheda",t:"heheda"为例,推导dp数组状态如下(可以发现,这里是把上面推出的表格,上外围多加了一层0,做外围多加了一层1,"heeeheh" 有 8 种组合可以出现 "heh",也就是:"原创 2023-10-11 22:43:05 · 339 阅读 · 1 评论 -
leetCode 53.最大子数组和 动态规划 + 优化空间复杂度
其实指的就是它的子数组的最大和,子数组其实就是连续的子序列。也就是在数组里边,找到一个连续的子序列,它的和一定是所有的连续子序列里边最大的,最后把这个和输出来。leetCode 53.最大子数和 图解 + 贪心算法/动态规划+优化_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。leetCode 53.最大子数和 图解 + 贪心算法/动态规划+优化_呵呵哒( ̄▽ ̄)"的博客-CSDN博客。从递推公式可知,dp[i] 依赖于 dp[i-1] 的状态,dp[0]是递推公式的基础。子数组:其实就是连续的子序列。原创 2023-10-10 12:28:37 · 257 阅读 · 0 评论 -
leetCode 1035.不相交的线 动态规划 + 滚动数组 (最长公共子序列)
但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。找出两个数组中相同的元素,给它们连成线,还要保证这个线还不能相交,那如果就此深入思考,这个线如何判断它不能相交呢?其实这里是找两个数组中相同的元素,同时其实要保证数组里边的元素的顺序,也就是求子序列问题。本题说是求绘制的最大连接数,其实就是求两个字符串的最长公共子序列的长度。因为子序列也是在数组里边找元素的,但同时是保证数组里边的顺序。原创 2023-10-10 11:22:10 · 140 阅读 · 0 评论 -
leetCode 1143.最长公共子序列 一步步思考动态规划 + 优化空间复杂度
如果不选s中的c的话,就变成 abcd, abc这种情况,如果它更优,就表示dfs(i-1,j)比x+1还要大,即dfs(i-1,j) > x+1,那么这两个c匹配的话,再把他两去掉,就变成了abd和ab。其实是不需要的,因为在dfs(i-1,j)里面,如果它不选t[j]的话,那就回递归到dfs(i-1,j-1)了,那相当于dfs(i-1,j-1)的结果,已经在dfs(i-1,j)里面了,那对于dfs(i,j-1)也是同理的,所以我们不需要递归到dfs(i-1,j-1)这里,那最终就可简化成这个式子了。原创 2023-10-09 16:21:35 · 403 阅读 · 0 评论 -
leetCode 1143.最长公共子序列 动态规划 + 滚动数组
是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。" 的子序列 ,但是 "aec" 不是 "abcde" 的子序列。最长公共子序列是 "ace" ,它的长度为 3。最长公共子序列是 "abc" ,它的长度为 3。两个字符串没有公共子序列,返回 0。是这两个字符串所共同拥有的子序列。区别在于这里不要求是连续的了,但是。这三个方向都是经过计算的数值。,返回这两个字符串的最长。思考:有哪些方向可以推出。那么为了在递推的过程中,原创 2023-10-08 22:30:41 · 480 阅读 · 0 评论 -
leetCode 718.最长重复子数组 动态规划 + 优化(滚动数组)
拓展:若我想定义dp[i][j] 是以下标 i 为结尾的nums1,以下标 j 为结尾的 nums2 的最长重复子数组长度,可行不?其实本题相对来说就简单很多了,因为后面的递推公式,遍历顺序,初始化,都比较简单,dp[i][j]的状态只能由 dp[i-1][j-1]推导出来,即。递推公式dp[i][j] = dp[i-1][j-1] + 1;那么可将 dp[i][0] 和 dp[0][j] 初始化为0。当nums1[i-1] 和 nums2[j-1] 相等时,长度最长的公共子数组是 [3,2,1]。原创 2023-10-08 15:14:12 · 194 阅读 · 0 评论 -
leetCode 674. 最长连续递增序列 动态规划 / 贪心策略
当遇到nums[i] > nums[i - 1]的情况,count++,否则count 为 1,记录下count的最大值即可。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。,那么以 i 为结尾的连续递增的子序列长度 一定等于 以i - 1为结尾的连续递增的子序列长度 + 1。为结尾的连续递增的子序列长度最少也应该是1,即就是nums[i]这一个元素。dp[i]:以下标i为结尾的连续递增的子序列长度为dp[i]最长连续递增序列是 [2], 长度为1。原创 2023-10-07 22:23:08 · 296 阅读 · 0 评论 -
leetCode 300.最长递增子序列 动态规划 + 图解
j 其实就是遍历 0 到 i-1,那么是从前向后,还是从后到前都可以,只要是 0 到 i-1 的元素都遍历了就可以,所以习惯从前向后遍历。dp[i] 是 由 0 到 i-1 各个位置的最长递增子序列 推导出来,那么遍历 i 一定是从前向后遍历。“子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序”dp[i]表示 i 之前包括 i 的以 nums[i] 结尾的最长递增子序列的长度。最长递增子序列是 [2,3,7,101],因此长度为 4。是数组 [0,3,1,6,2,2,7]原创 2023-10-07 12:43:10 · 233 阅读 · 0 评论 -
leetCode 53.最大子数和 图解 + 贪心算法/动态规划+优化
由于前面已经计算过包括i = 1之前的最大连续子序列和,并且将值保存在 dp[1] 里,所以count = dp[1] + (-3) = 1 + (-3) = -2,接着在count 和 nums[2] = -3中选取最大值,即。发现 count < nums[3],这时候取最大值就可以让dp[3] = nums[3],表示接下来,可以调整起点,让 i = 3 为起点。count = (-2) + 1 = -1,在count 和 nums[1] = 1中选取最大值,即。贪心算法的巧妙需要慢慢体会!原创 2023-10-02 21:14:24 · 1010 阅读 · 0 评论 -
leetCode 376.摆动序列 动态规划 + 图解 + 状态转移
其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。仅有一个元素或者含两个不等元素的序列也视作摆动序列。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。down[i]: 数组 nums[0...i] 中的最长下降摆动序列。up[i]:数组 nums[0...i] 中的最长上升摆动序列。给的题解的思路总结和归纳。原创 2023-10-01 22:34:56 · 377 阅读 · 0 评论 -
leetCode 309.买卖股票的最佳时机含冷冻期 动态规划 + 滚动数组
其实,空间复杂度可以优化,定义一个dp[2][4]大小的数组就可以了,就保存前一天的当前的状态。dp[i-1][1] - prices[i],即dp[0][1]-prices[1]dp[i][j],第 i 天状态为 j ,所剩的最多现金为 dp[i][j]对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。昨天一定是卖出了股票(状态三),那么今天我就进入了冷冻期状态。,若初始为其他数值,则第1天买入股票后手里所剩的现金就不对了。原创 2023-10-01 12:52:49 · 98 阅读 · 0 评论 -
leetCode 188.买卖股票的最佳时机 IV 动态规划 + 状态压缩
随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3。一天 一共有 j 个 状态 ,dp[i][j] 中 i 表示 第 i 天,j 为[0 - 2*k] 个状态,dp[i][j]表示第 i 天状态 j所剩最大现金。在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。也就是说,你最多可以买 k。参考和推荐文章、视频。原创 2023-09-30 21:16:14 · 137 阅读 · 0 评论 -
leetCode 123.买卖股票的最佳时机 III 动态规划 + 状态压缩
随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。关键在于至多买卖几次,意味着可以买卖一次,可以买卖两次,也可以不买卖。参考和推荐文章、视频。原创 2023-09-30 18:39:22 · 149 阅读 · 0 评论 -
leetCode 122.买卖股票的最佳时机 II 动态规划 + 状态转移 + 状态压缩
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。原创 2023-09-30 14:07:49 · 146 阅读 · 0 评论 -
leetCode 121.买卖股票的最佳时机 动态规划 + 状态转移
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。② 若第 i 天不持有股票即 dp[i][1],也可以由两个状态推出来。其基础都是要从 dp[0][0] 和 dp[0][1] 推导出来。可以看出dp[i] 只是依赖于 dp[i - 1] 的状态。dp[i] 都是由 dp[i - 1] 推导出来的。原创 2023-09-30 12:41:41 · 198 阅读 · 0 评论 -
leetCode 139.单词拆分 + 完全背包 + 排列数
s = "applepenapple", wordDict = ["apple", "pen"] 中,"apple", "pen" 是物品,那么要求 物品的组合一定是 "apple" + "pen" + "apple" 才能组成 "applepenapple"。"apple" + "apple" + "pen" 或者 "pen" + "apple" + "apple" 是不可以的,那么就是强调物品之间顺序。返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。原创 2023-09-29 23:10:37 · 253 阅读 · 0 评论 -
leetCode 337. 打家劫舍 III 动态规划 房子都连成树了,偷不偷呢? “树形dp“ (递归三部曲 + 动规五部曲)
之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到。小偷又发现了一个新的可行窃的地区。【解惑】其实在递归的过程中,系统栈会保存每一层递归的参数~在左右孩子的 “偷” 和 “不偷” 记录中选一个最大的。长度为2的dp数组怎么标记树中的每个节点的状态呢?“这个地方的所有房屋的排列类似于一棵二叉树”。在遍历过程中,若是遇到空节点,无论。的dp数组,用来记录节点。,小偷能够盗取的最高金额。“偷” 与 “不偷”“偷” 与 “不偷”“偷” 与 “不偷”4.确定单层递归的逻辑。原创 2023-09-29 13:30:25 · 93 阅读 · 0 评论