algorithm-dp-bag
背包
0-1背包
给定一个背包的容量c
和n
个物品,第i
个物品的体积为w[i]
,价值为v[i]
。每个物品选或不选,求体积和不超过capacity
时的最大价值和
核心思路:枚举第i
个物品选或不选
初始化一个二维数组dp
,其中dp[i][j]
表示在考虑前i
个物品、背包容量为j
的情况下的最大总价值
dp[i][c] = max(dp[i-1][c], dp[i-1][c-w[i]] + v[i])
- 背包至多装capacity
- 求方案数
- 求最大价值和(传统01背包)
- 背包恰好装capacity
- 求方案数: 494. 目标和
- 求最大价值和
- 求最小价值和
- 背包最少装capacity
- 求方案数
- 求最小价值和
- 其它
完全背包
给定一个背包的容量c
和n
种物品,第i
种物品的体积为w[i]
,价值为v[i]
。每种物品无限次重复选,求体积和不超过capacity
时的最大价值和
考虑第i
个物品选不选时,可以重复选择,所以这里考虑dp[i][c]
时,可能多次更新dp[i][c-w[i]] + v[i]
dp[i][c] = max(dp[i-1][c], dp[i][c-w[i]] + v[i])
- 背包至多装capacity
- 求方案数
- 求最大价值和(原型)
- 背包恰好装capacity
- 求方案数:518. 零钱兑换 II
- 求最大价值和
- 求最小价值和:322. 零钱兑换
- 背包最少装capacity
- 求方案数
- 求最小价值和
- 其它
多重背包
多重背包和完全背包相似,只是一个物品被选取的次数有上限(不能无限选取)
- 背包至多装capacity
- 求方案数
- 求最大价值和(原型)
- 背包恰好装capacity
- 背包最少装capacity
- 求方案数
- 求最小价值和
- 其它
分组背包
同一组内的物品至多/恰好选一个。
- 背包至多装capacity
- 求方案数
- 求最大价值和(原型)
- 背包恰好装capacity
- 求方案数
- 背包最少装capacity
- 求方案数
- 求最小价值和
- 其它
- 背包容量不限
- 求装下物品重量与target的绝对差的最小值:1981. 最小化目标值与所选元素的差
- 背包容量不限
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BUGHERE の 博客!
评论