名家0/1
背包问题的重点是在给定的 Weight (W)
中获得最大成本/值(value).
上面的代码是这样的::
n = cost_array / weight_array size
INIT :: fill 0th col and 0th row with value 0
for (int i=1; i<=n; i++) {
for (int j=1; j<=W; j++) {
if (weight[i-1] <= j) {
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j - weight[i-1]] + cost[i-1]);
}else {
dp[i][j] = dp[i-1][j];
}
}
}
回答::
dp[n][W]
新问题 ::所以,这里我们计算的是最大成本/值(value)。但是如果我想找到最小成本/值(value)怎么办(它仍然只是有界背包)。
我认为问题归结为我如何做
INIT
上面的步骤。在循环中,我认为它会保持不变,唯一的区别是 Math.max
成为Math.min
我试过
INIT
步入 Infinity
, 0
等,但无法构建迭代解决方案。我们怎么可能做到这一点?
最佳答案
@radovix 提到的写作答案
关于dynamic-programming - 0/1 最低成本的背包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61704098/