
算法-动态规划-背包问题
文章平均质量分 63
关于背包问题的解析及练习
ZZZ_O^O
博客虽多,可不要贪杯哟~~~
展开
-
【动态规划-卡特兰数——96.不同的二叉搜索树】
需要用到前面位置的值,则需要初始化dp[0]为1,方便后续的填表。根据状态表示返回dp[n]原创 2024-11-21 22:45:00 · 1054 阅读 · 28 评论 -
【动态规划-似包非包问题】——377.组合总和IV
因为可能用到前面位置的值,所以要将第一个位置初始化,也就是总和为0的情况数,此时只有空集这一种情况,因此初始化dp[0]=1即可。状态表示确定后,状态转移方程随之就确定了 :dp[i] += dp[i-nums[i]]1.状态表示(重点难点)原创 2024-11-21 21:22:53 · 419 阅读 · 18 评论 -
动态规划-二维费用问题——879.盈利计划
【代码】动态规划-二维费用问题——879.盈利计划。原创 2024-11-18 23:28:48 · 712 阅读 · 12 评论 -
动态规划-二维费用问题——474.一和零
这里的初始化只需要初始化当i等于0时的情况即可,因为判断了j与k一定大于a和b,也就是一定不会越界,无需判断。当i等于0,意味着没有选择字符串,那么子集的长度一定为0,所以将第一层初始化为0即可。从前向后逐层填表,每一层从上到下,每一行从左到右。返回dp[len][m][n]原创 2024-11-18 22:51:05 · 595 阅读 · 8 评论 -
动态规划-完全背包问题——279.完全平方数
1][n]这个位置即可,因为不可能选择到n^2这个位置的平方数。从上到下,每一行从左到右。原创 2024-11-17 21:03:34 · 496 阅读 · 13 评论 -
动态规划-完全背包问题——518.零钱兑换II
从上到下,每一行从左到右。返回最后一个位置的值。原创 2024-11-16 23:16:16 · 531 阅读 · 9 评论 -
动态规划-完全背包问题——322.零钱兑换
判断最后一个位置是否可以选取,可以则返回其真实值,不可以则代表不能找出完全等于amount的最小硬币个数,返回-1。这里需要寻找硬币使总面值等于一个值求出所需硬币的最小个数,所以不妨设置一个二维dp表,即。dp[i][j]:在[1,i]个硬币中选择的硬币总面值完全等于j时所需要的最小硬币个数。从上到下,每一行从左到右。原创 2024-11-16 22:25:01 · 593 阅读 · 5 评论 -
动态规划-背包问题——1049.最后一块石头的重量II
首先依旧是背包问题的思路,对最后一个位置进行分类讨论,首先判断当第i个位置不会选取,此时就找到dp[i-1][j],判断此时的方法数;然后判断选取第i个位置的数,此时就需要寻找到dp[i-1][j-nums[i-1]]这个位置的dp表的值,然后加到总方法数中去,当然需要判断j>=nums[i-1]dp[i][j]:在[1,i]区间选择的数字总和不大于(小于或等于) j 的总和大小。子数尽可能接近于原数字的一半。原创 2024-11-15 23:31:38 · 444 阅读 · 10 评论 -
动态规划-背包问题——[模版]完全背包问题
与01背包相同,这里的完全背包也是需要一个二维dp表来表示最大价值,具体如下。返回最后一个位置dp表的值。从上至下,每一行从左到右。原创 2024-11-15 23:16:52 · 1372 阅读 · 4 评论 -
动态规划-背包问题——494.目标和
首先我们需要将问题简化,这里需要找到能将数组组合计算成为指定数字target的添加方式,那么我们就可以将数字分为两类,一类是前面添加"+"的,另一类则是添加"-"的,那么对这两类数字进行关系分析最终如下图得到了关于正数总和的表达式,因此就转化为将数组中的数字挑选出和恰好为a的组合方法有几种,也就是背包问题。然后判断选取第i个位置的数,此时就需要寻找到dp[i-1][j-nums[i-1]]这个位置的dp表的值,然后加到总方法数中去,当然需要判断j>=nums[i-1]返回dp表最后一个位置的值即可。原创 2024-11-13 22:45:18 · 641 阅读 · 4 评论 -
动态规划-背包问题——416.分割等和子集
3.初始化开辟了虚拟位置,需要对虚拟位置进行初始化4.填表顺序。原创 2024-11-11 23:27:06 · 538 阅读 · 11 评论 -
动态规划-背包问题——[模版]01背包(背包母题)
返回dp[n][V],第一小问代表在[1,n]个物品取出总体积不大于V的物品的最大总价值。第二小问代表在[1,n]个物品中取出物品体积恰好为V的总价值。原创 2024-11-10 20:03:48 · 461 阅读 · 1 评论