9.动态规划
文章平均质量分 74
Leetcode动态规划题
pig不会cv
这个作者很懒,什么都没留下…
展开
-
9.16单词拆分(LC139-M)
"apple", "pen" 是物品,那么我们要求 物品的组合一定是 "apple" + "pen" + "apple" 才能组成 "applepenapple"。"apple" + "apple" + "pen" 或者 "pen" + "apple" + "apple" 是不可以的,那么我们就是强调物品之间顺序。dp[i] 的状态依靠 dp[j]是否为true,那么dp[0]就是递推的根基,dp[0]一定要为true,否则递推下去后面都是false了。dp[i]:i为字符串的长度(装满背包的容量);原创 2024-03-19 17:24:22 · 427 阅读 · 0 评论 -
9.15完全平方数
j。原创 2024-03-12 21:04:15 · 544 阅读 · 0 评论 -
9.14零钱兑换(LC322-M)
题目中说每种硬币的数量是无限的,可以看出是典型的完全背包问题。原创 2024-03-11 11:59:13 · 1028 阅读 · 0 评论 -
9.13组合总和④
本题题目描述说是求组合,但又说是可以元素相同顺序不同的组合算两个组合,。原创 2024-03-11 10:49:15 · 311 阅读 · 0 评论 -
9.12零钱兑换(LC518-M)(开始完全背包,与01背包的不同仅在于遍历顺序)
这是一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背包。但本题和纯完全背包不一样,原创 2024-03-06 22:27:09 · 1004 阅读 · 0 评论 -
9.11一和零(LC474-M)
理解成多重背包的同学主要是把m和n混淆为物品了,感觉这是不同数量的物品,所以以为是多重背包。只不过这个背包有两个维度,一个是m 一个是n,而不同长度的字符串就是不同大小的待装物品。装满重量为m(m个0)和重量为n(n个1),两个维度的背包,最多能装多少物品。原创 2024-03-06 20:38:53 · 354 阅读 · 0 评论 -
9.10目标和(LC494-M)
加法的绝对值的集合left减法的绝对值的集合rightnums集合的总和sum这里的left和right都是绝对值:→ left = (target + sum)/2 ,target 和sum都是常量若target + sum为奇数,则无法整除,其实实际意义就是,没有组合能够得到目标和target。原创 2024-03-04 17:02:13 · 580 阅读 · 0 评论 -
9.9最后一块石头的重量②(LC1049-M)
视为注释,而不是有效的代码。因为重量都不会是负数,所以dp[j]都初始化为0就可以了,这样在递归公式dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);本题中,石头的重量是 stones[i],石头的价值也是 stones[i] ,可以 “最多可以装的价值为 dp[j]” == “最多可以背的重量为dp[j]”01背包中:dp[j]的含义-容量为j的背包,最多可以装的价值为 dp[j]。本题物品的重量为stones[i],物品的价值也为stones[i]。原创 2024-03-03 11:49:27 · 899 阅读 · 0 评论 -
9.8分割等和子集(LC416-M)
dp。原创 2024-03-03 11:21:38 · 966 阅读 · 0 评论 -
背包问题(理论)
对于面试的话,掌握,就够用了,最多可以再来一个。至于背包九讲其他背包,面试几乎不会问,都是竞赛级别的了,leetcode上连多重背包的题目都没有,所以题库也告诉我们,01背包和完全背包就够用了。而完全背包又是也是01背包稍作变化而来,即:完全背包的物品数量是无限的。leetcode上没有纯01背包的问题,都是01背包应用方面的题目,也就是需要转化为01背包问题。原创 2024-02-12 19:59:22 · 323 阅读 · 0 评论 -
9.7不同的二叉搜索树(LC96-M)
dp[j]为j为头结点左子树节点数量,dp[i - j-1]为以j为头结点右子树节点数量。dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。原创 2024-02-09 10:19:23 · 1284 阅读 · 0 评论 -
9.6整数拆分(LC343-M)
dp[i]:分拆数字i,可以得到的最大乘积为dp[i]原创 2024-02-08 09:23:33 · 348 阅读 · 0 评论 -
9.5不同路径②(LC63-M)
从递归公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 中可以看出,一定是从左到右一层一层遍历,这样保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值。从(0, 0)的位置到(i, 0)的路径只有一条,所以dp[i][0]一定为1,dp[0][j]也同理。这意味着即使在第一列中遇到了障碍物,仍然会继续向下遍历,继续赋值。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。原创 2024-02-05 09:38:04 · 1206 阅读 · 0 评论 -
9.4不同路径(LC62-M)
dp是二维数组→网格dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。原创 2024-02-05 08:50:45 · 302 阅读 · 0 评论 -
9.3使用最小花费爬楼梯(LC746-E)
dp[i]的定义:到达第i台阶所花费的最少体力为dp[i]。调到dp[i],不仅需要体力花费(dp[i - 1]或dp[i - 2] 跳1/2阶),还需要金钱花费(cost[i - 1]或 cost[i - 2])也就是说:dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。那么究竟是选从dp[i - 1]跳还是从dp[i - 2]跳呢?一定是选最小的,所以dp[i]原创 2024-02-05 08:06:44 · 364 阅读 · 0 评论 -
9.2爬楼梯(LC70-E)
多举几个例子,找规律:爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法。那么所以。原创 2024-02-02 11:19:02 · 424 阅读 · 0 评论 -
9.1斐波那契数(LC509-E)
一定要写在dp[1] = 1之前;否则当n=0时,就会在dp[1]处报错。dp[i]是依赖 dp[i - 1] 和 dp[i - 2]dp[i]的定义为:第i个数的斐波那契数值是dp[i]那么遍历的顺序一定是从前到后遍历的。原创 2024-02-02 10:57:04 · 239 阅读 · 0 评论 -
动态规划基础
是由前一个状态推导出来的(时序),而贪心是局部直接选最优的。原创 2024-02-02 10:36:57 · 325 阅读 · 0 评论