什么是添加数组元素的方法,sums等于数组中最大的元素?
这个数组的例子[4,6,23,10,1,3]我先对数组进行排序,得到[1,3,4,6,10,23]然后我弹出最后一位数或最后一位数element max = 23.我留下[1,3,4,6,10]并且需要一种方法来找到一种方法来找到最多可以加起来为23 + 3 + 4 + 6 + 10 = 23的元素。元素不必是随后的,它们可以在数组的随机点,但它们必须加起来最大。
我可以找到从2个元素到n-1个元素的排序数组的排列,并将它们相加并将它们与max进行比较,但这似乎效率低下。请帮忙
答案 0 :(得分:1)
这正是subset sum problem,NP-Complete,但如果你的数字是相对较小的整数,那么使用Dynamic Programming有一个有效的伪多项式解决方案:
D(i,0) = TRUE
D(0,x) = FALSE x>0
D(i,x) = D(i-1,x) OR D(i-1,x-arr[i])
如果有解决方案,您需要退回DP解决方案创建的矩阵,并“记录”您在此过程中所做的每个选择,以获取用于求和的元素。这个主题讨论如何在一个非常类似的问题中找到实际的元素(称为背包问题),它的解决方法类似:How to find which elements are in the bag, using Knapsack Algorithm [and not only the bag's value]?