无界背包伪代码

时间:2013-11-15 07:50:45

标签: algorithm pseudocode

我需要为我的作业修改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

1 个答案:

答案 0 :(得分:0)

如果你没有遗漏任何内容,如果你指的是this wiki article

在修改后的版本中,您的values数组应与w数组相同。计算m[n,W]后,只需检查它是否等于W

编辑: 如果你有无限数量的项目,那么你正在处理 Unbounded背包问题。这是一个不同的问题,同一篇文章给出了解决它的动态编程实现。

相关问题