我需要为我的作业修改wiki的背包伪代码,以便检查你是否可以在背包中达到精确的重量W.项目数量不受限制,您的价值不重要。我想在j> -W [j]下添加一个while循环来检查它适合的项目数量。那会有用吗?
由于
// Input:
// Values (stored in array v)
// Weights (stored in array w)
// Number of distinct items (n)
// Knapsack capacity (W)
for w from 0 to W do
m[0, w] := 0
end for
for i from 1 to n do
for j from 0 to W do
if j >= w[i] then
m[i, j] := max(m[i-1, j], m[i-1, j-w[i]] + v[i])
else
m[i, j] := m[i-1, j]
end if
end for
end for
答案 0 :(得分:0)
如果你没有遗漏任何内容,如果你指的是this wiki article
在修改后的版本中,您的values
数组应与w
数组相同。计算m[n,W]
后,只需检查它是否等于W
。
编辑: 如果你有无限数量的项目,那么你正在处理 Unbounded背包问题。这是一个不同的问题,同一篇文章给出了解决它的动态编程实现。