问题描述
假设有 种物品,每种数量无限,第 种物品质量为,价值为;给定最大承重为V的背包,求可以得到的最大价值。
状态函数及其转移方程
下面直接贴出最终版。
设表示考虑前 类物品,给定最大承重为 的背包可以获得的最大价值,那么有
疑难解释
表示根本不取第 种物品,这不难理解。难点在于对的理解。为什么只腾出了一个的空间?每种数量不是无限的吗?
仍然采用在01背包使用过的优先思想和整体思想。考虑状态,它表示考虑前 种物品的情况下,背包容量为 时所能获得的最大价值。解决这个问题,先决策是否放入第 种物品。在考虑放入的情况时,就先放一件,然后把剩余的事情交给 解决,因为它表示的是考虑第 件物品时,背包容量 的最优解。至于 这个状态中到底有没有/有几件 号物品,状态 并不关心。
归根结底, 的意思是允许放入前 种物品。那么状态 所表示的,就是“允许放前 种物品,但是削减了一部分空间用来保证第 种物品一定入选至少一件,在这种情况下求剩余空间利用的最佳方法”。
总结
无论是01背包,还是完全背包,它们的核心思想都是不变的。即:顺序地考虑物品,但并不是顺序地放入物品。他们都是依次考虑前 种物品,但是对于每一个具体的状态,先决策要不要放入最后一件(种)编号为 的再说。
考虑背包问题,一定不能想象成动态的加物品的过程,而是应该对每一个状态都完整地“往空背包里放物品”。所谓“整体考虑”是也。
Last modified on 2020-05-14