我想知道是否存在解决此问题的算法。它与背包0-1问题稍微相似,或者功率设置问题不同。给定有限的一组有序实数产生所有可能的子集,其总和<= k
给定有限的一组有序实数,我们需要生成所有可能的子集,其总和为< = k。这里k是真实的,排序后的实数都是正数。例如,数组= {1.48,2.21,30.07,4.35,4.46}和k = 5.94输出是:{4.46},{4.46,1.48},{4.35},{4.35,1.48},{3.07},{3.07,2.21 },{2.21},{2,21,1.48}和{1.48}。
解决问题的一种方法是简单地遍历最高数字{4.46},看看有多少人可以进入篮下,然后继续下一个最低数字{4.35}等等。有没有一种有效的方法来做到这一点?让我知道
输入是真的实数还是浮点数?或固定点?是'pi'还是'sqrt(2)'法律要素? – amit 2012-03-23 18:29:07
也相关:对于整数,找到一个子集,其中恰好*到'k'是[子集和问题](http://en.wikipedia.org/wiki/Subset_sum_problem),它是NP-Hard。 – amit 2012-03-23 18:33:02
是的,让我们假设这是固定点...想象一下,我们采用pi或sqrt(2),我们可以截断它到4位小数位。是的,如果我们假设它是整数,找到与k恰好相加的子集是动态规划解决的子集和问题 – SpiderMath 2012-03-25 00:19:56