多重背包问题,用n个物品,每个物品有价值v[i],每个物品数量限制为num[i]。
这道题是问,用所有的硬币能够在m的范围内最多可以组合成多少种价值。
1 | 对于每个硬币而言: |
_(对于num,类似于编码。当2^n _<=num/2时:k = 2^n(n=0,1,2,……)表示状态,对应下来就是二进制的某一位数是1,然后还有一个状态就是k>num/2的时候啦,num+1-k,这样下来就可以用k来组合枚举出从1->num的所有可能了。然后对于k,单位价值和大小都乘上k之后就变成了一个0-1背包)
1 |
|