引入
哈哈哈DP!我的DP!DP全都是zz(bushi)
其实完全背包问题可以看成是每个物品都有k个的01背包问题,这样就有了朴素的完全背包问题的做法;接着我们可以就递推式进行优化;
朴素的完全背包
思路
其实就可以把完全背包问题转化一下,把每一类物品都看成有k个, 这样就有一共有n * k个物品的,然后就可以当成01背包那样处理了,即每个物品都有取和不取两种选法,他的递推式大概长这样:
f[i, j] = max(f[i - 1][j], f[i - 1][j - 1 * v[i]] + 1 * w[i], f[i - 1][j - 2 * v[i]] + 2 * w[i], ...);
先看代码:
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
for (int k = 0; j - k * v[i] >= 0; k++)
f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]);
和01背包的对比和代码细节
我们再来看看01背包的代码:
for (int i = 1; i <= n; i++

最低0.47元/天 解锁文章
1022

被折叠的 条评论
为什么被折叠?



