- DP[i][j] = DP[i - 1][j] + DP[i][j - c[i]]
上面第一项代表用前i个物品填满容量j背包的方法,第二项代表分别用1,2,3...个第i + 1个物品填满j背包的方法数。如果展开第二项,我们可以得到
- DP[i][j] = DP[i - 1][j] + DP[i - 1][j - c[i]] + DP[i - 1][j - 2 * c[i]] + DP[i - 1][j - 3 * c[i]]
每一项就代表分别用0, 1, 2, 3...个第i + 1个物品的组合数。
假设有n个物品,背包总容量为V,时间复杂度为O(n * V),空间复杂度可以优化为O(V),代码如下:
No comments:
Post a Comment