背包0/1算法 - 无限资源

时间:2011-11-01 08:26:35

标签: algorithm dynamic-programming knapsack-problem

我遇到了一个思维麻烦,我只是感到沮丧。我有一个背包问题的工作算法,使用动态编程,我指定

  • 最大负荷
  • 项目(重量)

并且算法使用这些项目计算背包的最佳填充。但是现在我需要使用至少项目完全填充它,但我拥有无限量的每个项目。 (这些项目的权重为{1; w1; w2; ...},因此始终可以完成)。

我如何在“经典”算法中使用它?

由于

1 个答案:

答案 0 :(得分:3)

让     

  • M =需要填写的金额
  •     
  • w [] =权重数组
  •     
  • dp [] =最佳填充数组(dp [i]包含填充重量i所需的最少项目数。)

 initialize the dp array with INFINITY, dp[0] = 0;
 for(i = 0;i<size of w;i++) {
    for(j = 1;j<=M;j++) {
       if(j-w[i] >= 0) {
          dp[j] = min(dp[j], dp[j-w[i]]+1);
       }
    }
 }

 final solution is the value of dp[M];