
动态规划
文章平均质量分 96
动态规划
妖精七七_
一以贯之
展开
-
【二十】【动态规划】879. 盈利计划、377. 组合总和 Ⅳ、96. 不同的二叉搜索树 ,三道题目深度解析
如果选择第i个工作, 此时第i个工作需要的人数为group[i-1],产生的利润为profit[i-1],本来总人数不能超过j,选取第i个工作后,总人数不能超过j-group[i-1],本来总利润需要不少于k,选取第i个工作后,总利润需要不少于k-profit[i-1],因此dp[i][j][k]=dp[i-1][j-group[i-1]][k-profit[i-1]]。此时左边是1~(j-1),一共有(j-1)-1+1=j-1 个数, 右边是(j+1)~i,一共有i-(j+1)+1=i-j 个数,原创 2024-01-12 17:15:53 · 1442 阅读 · 5 评论 -
【十九】【动态规划】518. 零钱兑换 II、279. 完全平方数、474. 一和零,三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2024-01-09 19:12:55 · 1480 阅读 · 2 评论 -
【十八】【动态规划】1049. 最后一块石头的重量 II、【模板】完全背包_牛客题霸_牛客网、322. 零钱兑换,三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2024-01-08 16:23:28 · 1178 阅读 · 3 评论 -
【十七】【动态规划】DP41 【模板】01背包、416. 分割等和子集、494. 目标和,三道题目深度解析
j-v[i]>0, 此时把第i个物品放入背包,背包还需要放j-v[i]体积的物品,此时dp[i][j]=dp[i-1][j-v[i]]+w[i]。此时dp[i][j]=dp[i-1][j-nums[i]];如果把第i个物品放入背包, 此时g[i-1]+v[i]原创 2024-01-07 18:31:40 · 1332 阅读 · 8 评论 -
【十六】【动态规划】97. 交错字符串、712. 两个字符串的最小ASCII删除和、718. 最长重复子数组,三道题目深度解析
如果s3[i+j]==s1[i], 此时s3[i+j]与s1[i]匹配,如果s1[1,i-1]和s2[1,j]可以拼成s3[1,i+j-1]说明s1[1,i]和s2[1,j]可以拼成s3[1,i+j],此时dp[i][j]=dp[i-1][j];如果s3[i+j]==s2[j], 此时s3[i+j]与s2[i]匹配,如果s1[1,i]和s2[1,j-1]可以拼成s3[1,i+j-1]说明s1[1,i]和s2[1,j]可以拼成s3[1,i+j],此时dp[i][j]=dp[i][j-1];原创 2024-01-06 15:56:59 · 1452 阅读 · 3 评论 -
【十五】【动态规划】115. 不同的子序列、44. 通配符匹配、10. 正则表达式匹配 ,三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2024-01-05 19:42:06 · 1182 阅读 · 1 评论 -
【十四】【动态规划】1312. 让字符串成为回文串的最少插入次数、1143. 最长公共子序列、1035. 不相交的线,三道题目深度解析
如果[0,i][0,j]中最长公共子序列同时包括text1[i],text2[j],即text1[i]==text2[j], 此时最长公共子序列等于,[0,i-1],[0,j-1]中最长公共子序列后面添加i、j位置元素,此时[0,i][0,j]中最长公共子序列长度等于[0,i-1][0,j-1]中最长公共子序列长度+1,即 dp[i][j]=dp[i-1][j-1]+1。所以dp[i][j-1]应该不能取到,而dp[i-1][j]的值要么是1要么是0,为了统一上一种情况,故dp[i][j-1]应该为0。原创 2024-01-03 14:22:05 · 1065 阅读 · 1 评论 -
【十三】【动态规划】1745. 分割回文串 IV、132. 分割回文串 II、516. 最长回文子序列,三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2024-01-02 13:38:01 · 1381 阅读 · 1 评论 -
【十二】【动态规划】446. 等差数列划分 II - 子序列、647. 回文子串、5. 最长回文子串,三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2024-01-01 19:33:57 · 1235 阅读 · 1 评论 -
【十一】【C++\动态规划】1218. 最长定差子序列、873. 最长的斐波那契子序列的长度、1027. 最长等差数列,三道题目深度解析
如果不止考虑i位置一个元素, i位置元素可能跟在前面的任意位置元素后面,(0~i-1)定义(0<=j<=i-1),针对j位置元素,如果i位置元素和j位置元素构成斐波那契子序列,那么arr[i]=arr[j]+(前一个元素),但我们不知道以j位置元素结尾的最长子序列前一个元素是不是我们希望的那个元素,所以这个状态表示不足以推导出状态转移方程。k<i, 此时我们需要以(k,i)位置结尾的最长等差子序列再加上j位置元素,就是以(i,j)为结尾的最长等差子序列长度,即dp[i][j]=dp[k][i]+1。原创 2023-12-31 15:34:02 · 1136 阅读 · 1 评论 -
【十】【C语言\动态规划】376. 摆动序列、673. 最长递增子序列的个数、646. 最长数对链,三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2023-12-30 18:55:57 · 1292 阅读 · 1 评论 -
【九】【C语言\动态规划】139. 单词拆分(LeetCode)、467. 环绕字符串中唯一的子字符串(LeetCode)、300. 最长递增子序列(LeetCode),三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2023-12-29 21:08:44 · 1112 阅读 · 2 评论 -
【八】【C语言\动态规划】1567. 乘积为正数的最长子数组长度、413. 等差数列划分、978. 最长湍流子数组,三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2023-12-28 17:28:24 · 1086 阅读 · 7 评论 -
【七】【C语言\动态规划】最大子数组和、环形子数组的最大和、乘积最大子数组,三道题目深度解析
今天我们学习了动态规划的思想,动态规划思想和数学归纳法思想有一些类似,动态规划在模拟数学归纳法的过程,已知一个最简单的基础解,通过得到前项与后项的推导关系,由这个最简单的基础解,我们可以一步一步推导出我们希望得到的那个解,把我们得到的解依次存放在dp数组中,dp数组中对应的状态,就像是数列里面的每一项。在动态规划中,首先得到状态在最小的基础情况下的值,然后通过状态转移方程,得到下一个状态的值,反复迭代,最终得到我们期望的状态下的值。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。原创 2023-12-27 19:33:36 · 1134 阅读 · 3 评论 -
【六】【C语言\动态规划】买卖股票的最佳时机含手续费、买卖股票的最佳时机 III、买卖股票的最佳时机 IV,三道题目深度解析
动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。动态规划与数学归纳法思想上十分相似。数学归纳法:基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。原创 2023-12-26 16:25:51 · 1224 阅读 · 2 评论 -
【五】【C语言\动态规划】删除并获得点数、粉刷房子、买卖股票的最佳时机含冷冻期,三道题目深度解析
当第i天结束的时候,我们手上没有股票,且不在冷冻期,对应 dp[i][2],说明第i天白天我们没有卖股票,要么i-1天白天我们卖了股票,要么i-1天白天也没卖股票,然后第i天白天什么都没做。利润置0,dp[i-1][2]不为零,就不会取到dp[i-1][1],dp[i-1][2]为零,dp[i-1][1]也不会影响dp[i]的推导。i-1号房子粉刷的颜色不能是红色,要么是绿色要么是蓝色,从0号房子到i-1号房子,且i-1号房子粉刷成绿色蓝色时最小的花费分别是dp[i-1][1],dp[i-1][2]原创 2023-12-24 17:52:59 · 1093 阅读 · 2 评论 -
【四】【C语言\动态规划】地下城游戏、按摩师、打家劫舍 II,三道题目深度解析
对于(i,j)的状态值,分两种情况,(i,j)房间内的值是正数或者是负数。如果(i,j)房间的值是正数,说明我们到达(i,j)时的最小生命值应该是min(dp[i][j+1],dp[i+1][j])-dungeon[i][j],但是这样写又会有两种情况,那就是减出来的数是大于零的数或者是小于等于零的数,我们到达(i,j)房间时最小生命不可能是小于等于零的数,而减出来的数是小于等于零意义是,(i,j)的血包特别的大,即使你的血是负数,吃完之后都可以到达终点,所以实际上到达该位置的生命值为最低的1就可以。原创 2023-12-23 20:34:56 · 1285 阅读 · 2 评论 -
【三】【C语言\动态规划】珠宝的最高价值、下降路径最小和、最小路径和,三道题目深度解析
要到达(i,j)位置,要么从(i,j-1)位置往右走一步,要么从(i-1,j)位置往下走一步。根据状态转移方程我们知道,如果要推导出(i,j)位置的状态,我们需要知道(i-1,j)和(i,j-1)位置的状态,所以在数组的第一行和第一列中,如果我们要推导这些状态,就会造成越界访问,所以需要对这些位置上的值进行初始化。如果我们要到达(i,j)位置,要么从(i,j-1)位置向右走一步,要么从(i-1,j)位置向下走一步,dp[i][j]表示,从(0,0)位置出发,到达(i,j)位置的所有情况下最小路径和。原创 2023-12-22 22:49:02 · 1073 阅读 · 1 评论 -
【二】【C语言\动态规划】解码方法、不同路径、不同路径II,三道题目深度解析
这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。对于第一种情况,dp[i-1][j]表示从(1,1)出发,到达(i-1,j)的路径数,对于每一条路径最后都添加一步,往下走一步,到达(i,j),这样的路径就是从(1,1)出发到达(i,j)的路径,这样的路径有多少条呢?如果没有障碍物,那我们就要考虑(i,j)的状态值,想一想其他状态然后推导出该状态,要么从上面往下走一步到(i,j)要么从左边往右走一步到(i,j),所以dp[i][j]=dp[i][j-1]+dp[i-1][j]原创 2023-12-21 00:52:04 · 1035 阅读 · 2 评论 -
【一】【C语言\动态规划】动态规划——第 N 个泰波那契数、三步问题,使用最小花费爬楼梯 ,三道题目深度解析
动态规划是一种思想,利用动态规划的思想可以很方便的解决某些题目。动态规划简单来说,就是建立一个dp表,dp表上每个位置对应一个状态,通过前后位置的状态推导出自己的状态,这个所谓的状态定义通常是依据经验和题目要求来定义。我们需要怎么把动态规划的思想在题目中运用?按照以下步骤,状态表示:状态转移方程:初始化:填表顺序:返回值:如果看不懂没有关系,我们将通过四道例题讲解动态规划。注意,点击标题可以到leetcode原地址。首先我们先把步骤抄过来。原创 2023-12-17 22:29:13 · 964 阅读 · 2 评论