Arrays 把这一组分成两人一组

Arrays 把这一组分成两人一组,arrays,algorithm,data-structures,set,Arrays,Algorithm,Data Structures,Set,给定的是一组元素。您必须将它们分成两组,这样单个组的元素之和之间的差异最小 例如: 5 4 6 7 2 1 两组是:{4,6}和{7,2,1} 我的方法:我只遇到了这个问题的强力解决方案,即使用位移位技术生成集合的所有子集(2^n) 我正在寻找更好的解决方案。我将给你两个提示,而不是给你解决方案: 计算所有元素的和,而不是解决原始问题。表示此S。解决如下所述的问题-找到给定数字的子集,其总和不超过S/2。其余的数字将构成另一个子集 我上面描述的问题非常简单,所有元素的成本都相等。同样,它可以通

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

例如:

5
4 6 7 2 1
两组是:
{4,6}
{7,2,1}

我的方法:我只遇到了这个问题的强力解决方案,即使用位移位技术生成集合的所有子集
(2^n)


我正在寻找更好的解决方案。

我将给你两个提示,而不是给你解决方案:

  • 计算所有元素的和,而不是解决原始问题。表示此
    S
    。解决如下所述的问题-找到给定数字的子集,其总和不超过
    S/2
    。其余的数字将构成另一个子集

  • 我上面描述的问题非常简单,所有元素的成本都相等。同样,它可以通过使用来解决(但在这种情况下,它将比用于经典背包问题的方法简单得多)


  • 可能重复的@H2CO3这将不起作用,我可以给你一个反例:
    {1,2,2,7}
    H2CO3,请将你的答案作为答案而不是评论发布。@IvayloStrandjev请证明,我不认为这个特殊情况有什么错。@H2CO3你将把1和7作为最小和最大元素放在同一组中,而最好的解决方案实际上是
    {1,2,2,2}
    {7}
    的差值为1