我有一个正整数数组说{a1,a2,....,an},我想找出满足以下条件的所有可能的数组子集:
(sum >= K)
其中K是正整数。我知道这个问题的解决方案是动态编程,但无法考虑如何在这种情况下使用它。请帮忙。
P.S。 :我并不完全需要所有子集,而是说出所有子集的所有元素的乘积。
答案 0 :(得分:0)
你的问题看起来类似于0-1背包问题,除了东西 - 通常这个限制是,总和必须小于而不是K.
但是你列出的问题是限制是什么,总和必须更大。
因此,例如,如果您找到子集,它的总和大于K,那么您可以添加任何未包含在您的子集中的集合元素,这仍然是答案。我们假设,你的集合是{a1,a2,a3,a4}和sum {a1}> = K.然后,你有2 ^ 3种方法将a2,a3和a4添加到你的子集。
所以,这个问题看起来像是指数问题,因为你需要列出所有可能的变化。
最坏的情况是,当K = 0时,你有N个元素大于0.所以,你需要列出2 ^ N个子集。
有帮助