二维费用背包问题:
题目: AcWing 8. 二维费用的背包问题 - AcWing
二维费用就是比一维多加了一维,循环方式是一样的
背包体积的不同状态的初始化:
参考文章: 背包问题中 体积至多是 j ,恰好是 j ,至少是 j 的初始化问题的研究 - AcWing
(1)体积至多为 j:
1.获取方案数:
二维:f[0][j] 初始化为1,其余为0,并且要保证背包剩余体积不为负数
一维:f[j] 初始化为1,并且要保证背包剩余体积不为负数
2.求最大最小值:
二维最大值:全部初始化为0,并且要保证背包剩余体积不为负数
一维最大值:全部初始化为0,并且要保证背包剩余体积不为负数
(2)体积恰好为 j:
1. 获取方案数:
二维:f[0][0] 初始化为1,其余为0,并且要保证背包剩余体积不为负数
一维:f[0] 初始化为1,其余为0,并且要保证背包剩余体积不为负数
2.求最大最小值:
二维最大值:f[0][0] 初始化为0,其余为-INF
二维最小值:f[0][0] 初始化为0,其余为INF
一维最大值:f[0] 初始化为0,其余为-INF
一维最小值:f[0] 初始化为0,其余为INF
(3)体积至少为 j:
1.获取方案数:
二维:f[0][0] 初始化为1,其余为0,背包剩余体积可以为负数
一维:f[0] 初始化为1,其余为0,背包剩余体积可以为负数
2.求最大最小值:
二维最小值:f[0][0] 初始化为0,其余为INF
一维最小值:f[0] 初始化为0,其余为INF
混合背包问题:
通过混合背包可以了解到:对于二进制拆分,是可以一步一步来的,所以之前的多重背包模板也可以一步一步来。
背包选择方案的输出:
题目: AcWing 1013. 机器分配 - AcWing
对于选择方案的输出,先用一个前缀数组把方案存起来,然后回溯输出
具体策略是:如果当前拿的价值,加上之前的价值,等于当前的总价值,那么就说明拿了当前物品