例如,我可以有4个人排名 [1、2、3、4] 。如何有效地(如果可能,在线性时间内)组建两个均衡的团队 [1,4],[2,3] ?
通过平衡,我希望它们的总和尽可能接近并且它们的大小相等(偶数池)或相差1(奇数池)。
任何帮助将不胜感激。谢谢。
修改
我能够弄清楚。有几种情况,一旦我确定了该列表属于哪个类别,它就非常简单。
答案 0 :(得分:1)
这是一种subset sum problem,但子集大小受到限制。
可以通过在O(n*Sum)
时间内进行动态编程来解决此问题(如果Sum
具有合理的限制,则适用)。
目标是通过Sum/2
个项目获得n/2 +-1
的价值。
对于1..n范围内的值的特定情况:
N个偶数:获取对(1,n), (2,n-1)...(n/2, n/2 + 1)
N个奇数:获取对(2,n), (3,n-1)...((n + 1)/2, (n + 1)/2 + 1)
并将左1
添加到任何组