用动态规划求解分数背包问题

Posted

技术标签:

【中文标题】用动态规划求解分数背包问题【英文标题】:Solving fractional knapsack problem with dynamic programming 【发布时间】:2020-06-04 17:12:17 【问题描述】:

前几天,我在阅读关于分数背包问题的贪心算法和动态规划的文章,我看到这个问题可以用贪心方法最优地解决。谁能给出一个例子或解决方案来用动态规划方法解决这个问题?

P.S:我知道贪心法是解决这个问题的最好方法,但我想知道动态规划是如何解决这个问题的。

【问题讨论】:

【参考方案1】:

是的,你可以用动态规划解决这个问题。

f(i, j) 表示使用容量为j 的背包使用第一个i 元素可以获得的最大总值。

如果您熟悉 0-1 背包问题,那么您可能还记得我们有完全相同的功能。但是,0-1 背包问题的重现是f(i, j) = maxf(i - 1, j), V[i] + f(i - 1, j - W[i])(第一个参数考虑了我们不使用索引i 的项目的情况,第二个参数考虑了我们确实使用了索引处的项目i)。

在分数背包问题中,我们被允许携带分数数量的物品。因此,我们的重复出现类似于f(i, j) = maxf(i - 1, j), delta * V[i] f(i - 1, j - delta * W[i]) 在所有可能的delta 值上,其中delta 表示我们正在服用的物品的数量。

现在如果你以足够小的增量增加delta,你应该得到正确的答案。

【讨论】:

if you increment delta in sufficiently small increments, you should get the correct answer 所以它恢复到多参数优化问题,看起来不适合动态编程方法;-)

以上是关于用动态规划求解分数背包问题的主要内容,如果未能解决你的问题,请参考以下文章

背包问题(动态规划)

oj系列:动态规划求解01背包问题

动态规划求解0/1背包问题

动态规划算法--01背包问题

动态规划中的0-1背包问题怎么去理解?要求给出具体实例和详细步骤。。。

动态规划求解0-1背包问题