使用动态规划的价值无关背包问题

时间:2015-03-21 13:14:53

标签: c++ algorithm knapsack-problem

我搜索了所有网站。但背包问题总是与权重和价值观有关。

我必须针对以下问题编写算法和C ++实现。

问题:

背包问题是给定一组正整数(a1,.....,an)和大小为s的背​​包,找到(a1,.....,an)的子集A,这样A中元素的总和最大但最多为s。

必须使用动态编程为此设计算法。还必须证明正确性,并且必须为此计算计算时间。

您能为此提供任何有用的资源吗?任何人都可以解释如何做到这一点?因为在整个网络中我只能找到重量和值的背包问题。

这个问题有些特殊。

请尽快发布....

1 个答案:

答案 0 :(得分:0)

这是subset sum problem,它是背包的私有实例,cost[i] = weight[i]为每个项目i

DP解决方案遵循以下递归公式:

D(0,i) = true
D(x,i) = false        x < 0
D(x,0) = false        x > 0
D(x,i) = D(x-arr[i],i-1) OR D(x,i-1)

最后,x<=S的最高值(D(x,n) = true)是最高可能的最高值S.