概述
上一篇博客讲到了背包问题中的01背包问题,今天这篇博客继续介绍背包问题中的完全背包问题。
首先回顾一下背包问题,背包问题解决的是:一共有N
件物品,有一个容积为V
的背包,第i
个物品有两个属性:体积v[i]
和价值w[i]
,在背包能装下的前提下,能装的物品最大价值是多少。
完全背包
完全背包问题的关键是,每个物品有无限个。
状态转移方程
根据上次求解01背包的思路,求解完全背包也需要分成两个部分,分别是状态表示和状态计算。
所有背包问题的二维状态表示都和01背包问题一样:用f[i, j]
表示所有只考虑前i
个物品,且总体积不大于j
的所有选法。以下的多重背包,和分组背包问题的状态表示将不再赘述。
而完全背包问题的状态计算也可以参考01背包问题。01背包问题是将状态分成了两份,分别是不含i
和含i
的部分。因此01背包问题的状态转移方程为:f[i, j] = Max(f[i - 1, j], f[i-1, j-vi]+wi)