// 用 [0...index]的物品,填充容积为c的背包的最大价值
private int bestValue(int[] w, int[] v, int index, int c){
if(c <= 0 || index < 0)
return 0;
if(memo[index][c] != -1)
return memo[index][c];
int res = bestValue(w, v, index-1, c);
if(c >= w[index])
res = Math.max(res, v[index] + bestValue(w, v, index - 1, c - w[index]));
return memo[index][c] = res;
}
老师您好,关于背包问题 这个方法的描述是不是不准确呢?
首先index是从n-1开始的 也就是说是从w中的最后一个元素开始往前遍历依次添加进res中,
根据终止条件:
如果c<=0 那么这个范围是[index…len-1]
如果index<0 那么这个范围是[0…len-1]
综上这个方法的作用应该是:
用 [index…len-1]的物品,填充容积为c的背包的最大价值
因为index不一定100%遍历到0
但是根据思想我们一定要遍历到inde=0为止 ,因为我们要把w中所有元素都计算后才能得出结果。
感觉有点自相矛盾,老师能再帮我解释下吗? 谢谢
登录后可查看更多问答,登录/注册