描述:
示例:
代码:
class Solution {
public:
int backPackII(int m, vector<int>& A, vector<int>& V) {
vector<int> f(m + 1, 0);
int n = A.size();
for (int i = 1; i <= n; i++) {
int w = A[i - 1];
int v = V[i - 1];
for (int j = m; j >= w; j--) {
f[j] = max(f[j], f[j - w] + v);
}
}
return f[m];
}
};
个人理解:
创建一个大小为m+1的背包
我们 一个一个 的放入物品,这就要求,我们放入一个物品,就要判断这个物品放在背包的哪里所产生的价值分别是多少:
即:和上一个物品重合了,那么就需要比较这个物品的价值和上一个物品的价值,计算此时如果背包只有目前位置大小时,背包放下这两件物品之一的价值是多少?
如果我们把这个物品往后放点争取不让他们重合,然后判断背包的价值
也可以创建一个二维数组,这样更好理解,