背包问题的这种变化需要最小的重量。目标是最小化成本,同时至少达到最小重量。
例如,我们有6个项目的重量 {1, 1, 1, 5, 13, 3}
和成本 {1, 1, 1, 5, 10, 12}
. 假设最小重量为15。
最佳解决方案是 {1, 2, 5}
总共15磅,12美元。
我应该如何尽可能有效地实现这个算法?贪婪的选择不起作用,所以我应该修改原始的动态规划解决方案来适应这个问题吗?如果是,怎么做?
如果有关系的话,我打算用java来写这个。
背包问题的这种变化需要最小的重量。目标是最小化成本,同时至少达到最小重量。
例如,我们有6个项目的重量 {1, 1, 1, 5, 13, 3}
和成本 {1, 1, 1, 5, 10, 12}
. 假设最小重量为15。
最佳解决方案是 {1, 2, 5}
总共15磅,12美元。
我应该如何尽可能有效地实现这个算法?贪婪的选择不起作用,所以我应该修改原始的动态规划解决方案来适应这个问题吗?如果是,怎么做?
如果有关系的话,我打算用java来写这个。
2条答案
按热度按时间xzlaal3s1#
让
minCost[i]
表示背包容量的最小值i
我能坚持住,costs[i]
表示第i项的成本,以及weights[i]
表示第i项的重量。然后,对于每一个我,minVal[i]
是最小值minVal[i - weights[j]] + costs[j]
对所有人j
从1到项目数。那么,答案就是
minCost
从最小权重到最大权重范围内的数组。演示
egmofgnx2#
让我们定义函数f(i,j),它给出了从第一个i+1个项目(0,1…i)中选择项目的最小成本,其中这些项目的权重之和正好等于j,那么获得至少权重(minw=15)的最小成本将如下计算:
您可以参考以下c++代码(非常类似于java):