给定是一组元素必须将它们分成两组,这样单个组的元素之和之间的差异最小。
例子:

5
4 6 7 2 1

两组是:{4,6}{7,2,1}
我的方法:我只遇到了这个问题的强力解决方案,即使用位移技术生成集合的所有子集。
我在寻找更好的解决办法。

最佳答案

我给你两个建议,而不是给你答案:
计算所有元素的和,而不是解决原始问题。表示这个S解决如下问题-找到给定数字的一个子集,其和不超过S/2其余的数字将构成另一个子集。
我上面描述的问题非常简单,所有元素的成本都是相等的同样,它可以用knapsack problem来解决(但在这种情况下,它将比经典背包问题简单得多)

09-25 19:59