子集总和:查找总和大于K的子集

时间:2013-08-08 11:55:48

标签: dynamic-programming subset-sum

我有一个正整数数组说{a1,a2,....,an},我想找出满足以下条件的所有可能的数组子集:

(sum >= K)

其中K是正整数。我知道这个问题的解决方案是动态编程,但无法考虑如何在这种情况下使用它。请帮忙。

P.S。 :我并不完全需要所有子集,而是说出所有子集的所有元素的乘积。

1 个答案:

答案 0 :(得分:0)

你的问题看起来类似于0-1背包问题,除了东西 - 通常这个限制是,总和必须小于而不是K.

但是你列出的问题是限制是什么,总和必须更大

因此,例如,如果您找到子集,它的总和大于K,那么您可以添加任何未包含在您的子集中的集合元素,这仍然是答案。我们假设,你的集合是{a1,a2,a3,a4}和sum {a1}> = K.然后,你有2 ^ 3种方法将a2,a3和a4添加到你的子集。

所以,这个问题看起来像是指数问题,因为你需要列出所有可能的变化。

最坏的情况是,当K = 0时,你有N个元素大于0.所以,你需要列出2 ^ N个子集。

这个链接可能对http://en.wikipedia.org/wiki/Subset_sum_problem

有帮助