给定是一组元素必须将它们分成两组,这样单个组的元素之和之间的差异最小。
例子:
5
4 6 7 2 1
两组是:
{4,6}
和{7,2,1}
。我的方法:我只遇到了这个问题的强力解决方案,即使用位移技术生成集合的所有子集。
我在寻找更好的解决办法。
最佳答案
我给你两个建议,而不是给你答案:
计算所有元素的和,而不是解决原始问题。表示这个S
解决如下问题-找到给定数字的一个子集,其和不超过S/2
其余的数字将构成另一个子集。
我上面描述的问题非常简单,所有元素的成本都是相等的同样,它可以用knapsack problem来解决(但在这种情况下,它将比经典背包问题简单得多)