动态规划
文章平均质量分 62
动态规划
斯沃福德
这个作者很懒,什么都没留下…
展开
-
LeetCode 120:三角形最小路径和
memo[i][j] 表示从 triangle[0][0]到triangle[i][j] 所经过的路经总和大小;输出的结果没有确定,最后一行有 j 个,需要在main中依次判断哪个最小!,将这两种取最小,再加上自己,就是 memo[i][j];原创 2022-09-08 21:58:47 · 221 阅读 · 0 评论 -
LeetCode 416:分割等和子集(子集背包)
dp[i][j] = x 表示,对于前 i 个物品(i 从 1 开始计数),当前背包的容量为 j 时,若 x 为 true,则说明可以恰好将背包装满,若 x 为 false,则说明不能恰好将背包装满。如果不把 nums[i] 算入子集,或者说你不把这第 i 个物品装入背包,那么是否能够恰好装满背包,取决于上一个状态 dp[i-1][j],继承之前的结果。如果把 nums[i] 算入子集,或者说你把这第 i 个物品装入了背包,那么是否能够恰好装满背包,取决于状态 dp[i-1][j-nums[i-1]]。原创 2022-09-07 22:31:21 · 824 阅读 · 0 评论 -
LeetCode 1024:视频拼接(贪心)
**思路**:先按照**起点升序排序**,**如果起点相同的话按照终点降序排序**,主要考虑到这道题的以下 两个特点: 1. 要用若干短视频凑出完成视频 [0, T],**起点必须是 0 !** 2. 如果有几个短视频的起点都相同,那么⼀定应该选择那个最长(**curEnd终点最⼤**)的视频。原创 2022-09-06 19:28:26 · 681 阅读 · 0 评论 -
LeetCode 452:用最少数量的箭引爆气球(贪心)
【代码】LeetCode 452:用最少数量的箭引爆气球。原创 2022-09-05 20:07:21 · 148 阅读 · 0 评论 -
LeetCode 435:无重叠区间 (贪心)
贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。比如说一个算法问题使用暴力解法需要指数级时间,如果能使用动态规划消除重叠子问题,就可以降到多项式级别的时间,如果满足贪心选择性质,那么可以进一步降低时间复杂度,达到线性级别的;原创 2022-09-05 19:29:12 · 282 阅读 · 0 评论 -
LeetCode 64:最小路径和
状态转移:[i][j] 位置只会由 [i-1][j] 和[i][j-1] 两个路径而来,所以只需要在这两个路径的值中取最小,再加上grid[i][j]当前大小,就等于memo[i][j];定义备忘录memo[i][j] 为从左上角出发,到当前位置的路径最小和;...原创 2022-08-27 17:55:02 · 175 阅读 · 0 评论 -
LeetCode 276:栅栏涂色
题目:状态:即栅栏的索引位置和 是否与上一个同色, 两种状态;dp定义: 指 第 i 个栅栏与第 i-1个栅栏同色的颜色可能性,指第 i 个栅栏与上一个不同色的颜色可能性选择:根据题意,即和上一个同色,由于同一个颜色只能相邻两次,那么第 i-1个栅栏注定不能和上一个(i-2)同色! 所以 ;而指 i 和 i-1不同色,那么 i-1位置的栅栏 既可以与i-2同色也可以与i-2不同色,且此时 i栅栏可以有 k-1种颜色可选;base case: 从 i=1 开始算,dp[1][0]=0 即第一次不可能和上原创 2022-08-11 18:03:51 · 953 阅读 · 0 评论 -
LeetCode 198:打家劫舍
**dp定义:以start为起点,可以偷的最多的钱是多少**, 所求即 dp(nums,0) ; - **状态和选择**: **状态**:就是起点start,即小偷所处的位置即nums数组的索引; **选择**:当前要么抢,要么不抢,如果不抢则start想前走+1,如果抢,则要加上当前nums中start位置的钱,然后start+2 !......原创 2022-08-10 17:17:00 · 162 阅读 · 0 评论 -
买口罩(0-1背包)
背包两个属性:容量W和N个物品(N个数一般等于物品数量,即 状态 **i** )原创 2022-08-08 21:08:33 · 200 阅读 · 0 评论 -
LeetCode 122:买卖股票的最佳时机 II
上一题最大交易次数K=1,而此题不限制K,即K为无穷,区别在于求今天有时,昨天没有、今天买了是。代码部分和上一题121几乎一样,原创 2022-07-26 19:06:50 · 339 阅读 · 0 评论 -
LeetCode 121:买卖股票的最佳时机
最后一个rest状态一定是0,即卖出了股票,利润才可能最大;原创 2022-07-26 18:43:48 · 300 阅读 · 0 评论 -
剑指Offer 71:跳台阶扩展问题
因为f(n−1)=f(n−2)+f(n−3)+…+f((n−1)−(n−2))+f((n−1)−(n−1));逆向思维,在n阶台阶上往下走,共有1+2+…原创 2022-07-19 17:09:06 · 267 阅读 · 0 评论 -
LeetCode 69:爬楼梯 / 跳台阶
代码】LeetCode69爬楼梯/跳台阶。原创 2022-07-19 16:38:13 · 495 阅读 · 0 评论 -
剑指Offer 42:连续子数组的最大和
dp[i]有两种「选择」,要么与前⾯的相邻⼦数组连接,形成⼀个和更⼤的⼦数组;要么不与前⾯的⼦数组连接,⾃成⼀派,⾃⼰作为⼀个⼦数组。dp数组的定义以nums[i]为结尾的「最大子数组和」为dp[i];按照数学归纳法,假设我们知道了dp[i-1],如何推导出dp[i]?............原创 2022-07-18 19:29:37 · 129 阅读 · 0 评论 -
LeetCode 300:最长递增子序列
basecasedp[i]初始值为1,因为以nums[i]结尾的最⻓递增⼦序列起码要包含它⾃⼰。根据这个定义,我们的最终结果(⼦序列的最⼤⻓度)应该是dp数组中的最⼤值。原创 2022-07-17 22:12:15 · 263 阅读 · 0 评论 -
LeetCode 931:下降路径最小和
从第⼀⾏(matrix[0][j])向下落,落到位置matrix。原创 2022-07-16 17:48:24 · 399 阅读 · 2 评论 -
LeetCode 322:零钱兑换
题目:动态规划是求最值,核心是穷举;动态规划框架:⾸先,这个问题是动态规划问题,因为它具有**「最优子结构」的。要符合「最优⼦结构」,⼦问题间必须互相独立**。举例:⽐如说,假设你考试,每⻔科⽬的成绩都是互相独⽴的。你的原问题是考出最⾼的总成绩,那么你的⼦问题 就是要把语⽂考到最⾼,数学考到最⾼…… 为了每⻔课考到最⾼,你要把每⻔课相应的选择题分数拿到最 ⾼,填空题分数拿到最⾼…… 当然,最终就是你每⻔课都是满分,这就是最⾼的总成绩。得到了正确的结果:最⾼的总成绩就是总分。因为这个过程符合最优⼦结构原创 2022-07-13 21:32:32 · 260 阅读 · 0 评论 -
LeetCode 509:斐波那契数
链接题目:动态规划问题一般形式就是求最值;因为要求最值,所以动态规划的核心问题是穷举;需要掌握递归思维,只有列出正确的「状态转移方程」,才能正确地穷举;而且需要判断算法问题是否具备「最优子结构」,是否能够通过⼦问题的最值得到原问题的最值;另外,动态规划问题存在「重叠子问题」,如果暴⼒穷举的话效率会很低,所以需要使用「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。状态转移方程、最优子结构、重叠子问题 就是动态规划三要素 ;明确 base case -> 明确「状态」-> 明确「选原创 2022-07-11 19:14:41 · 141 阅读 · 0 评论