N 物品数量,V 背包体积,v 体积,w 价值,s 数量
#include <iostream>
const int MAX = 2e3 + 10;
int N, V, f[MAX];
int main() {
std::cin >> N >> V;
for (int i = 1, v, w, s; i <= N; ++i) {
std::cin >> v >> w >> s;
for (int k = 1; k <= s; k <<= 1) {
for (int j = V; j >= k * v; --j)
f[j] = std::max(f[j], f[j - k * v] + k * w);
s -= k;
}
if (s) {
for (int j = V; j >= s * v; --j)
f[j] = std::max(f[j], f[j - s * v] + s * w);
}
}
std::cout << f[V] << std::endl;
return 0;
}
请问
if (s) {
for (int j = V; j >= s * v; --j)
f[j] = std::max(f[j], f[j - s * v] + s * w);
}
这里的作用是什么?
上面对于 k 的循环不应该遍历到 1∼s 的全部数量了吗?
小号给关。