不同背包定义
01背包:每个物品数量唯一
完全背包:每个物品数量无限
多重背包:不同物品数量不同
解题思路
- 确定是否为背包问题,即有物品重量,价值,背包容量
- 确定背包容量,每个 物品的重量,价值
- 确定 物品数量/背包类型 为 1(01背包)、无限(完全背包)
- 确定题目问题,找到对应递推公式,初始化、确定遍历顺序
- 特判
递推公式
- 能否装满背包(最多能装多少):
dp[j] = max(dp[j],dp[j-nuims[i]]+nums[i])
如:石头碰撞(最后剩下石头数),分割等和子集(分割两个子串使其值尽量相等) - 装满背包有多少种方法:
dp[j] += dp[j-nums[i]]
如:目标和(组成指定目标和有多少种方法) , 零钱兑换II(无限个硬币,组成目标值的方法数) - 背包装满的最大价值:
dp[j] = max(dp[j],dp[j-weight[i]]+value[i])
如:最原始的01背包,0和1(通过01组成的最大子集大小) - 装满背包的所有物品最小个数:
dp[j] = min(dp[j],dp[j-coins[i]]+1)
如: