01 有m个物品限制的背包问题

Posted

技术标签:

【中文标题】01 有m个物品限制的背包问题【英文标题】:01 knapsack problem with the limit of m items 【发布时间】:2020-11-03 03:11:08 【问题描述】:

有一个背包,容量为C,有n个项目可供选择,每个项目只有一个,并且它们的大小和值分别为ci和vi(i=1,2,...,n),如何在最多装载 m 件物品的情况下从物品中挑选物品,以最大化背包中的总价值? 谁能告诉我这个问题的具体思路,或者有什么代码可以看的吗?THS

【问题讨论】:

【参考方案1】:

您应该定义以下函数 f(i,j,k),它可以通过从最大容量为 j 的前 i 个项目 (1,2..i) 中精确选择 k 个项目来为您提供可以得到的最大值。

根据我们的定义,转换将是:

f(i , j , k) = max( t1 , t2 )

t1 = f(i-i , j , k) // here we did not pick the i-th item

t2 = vi + f(i-1 , j - ci , k-1)// here we picked the i-th item

您的问题的结果将是 max( f(n,C,i) ) 其中 i=1,2...n

【讨论】:

以上是关于01 有m个物品限制的背包问题的主要内容,如果未能解决你的问题,请参考以下文章

算法模板-01背包

动态规划——01背包问题

多重背包问题

算法之名——动态规划(01背包)

01背包问题(动态规划)

背包问题学习总结(5.8)