博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一组数分成两组,差的绝对值最小。

这个问题是前段时间面试完美的时候被问到的。 当时没答出来,后来一直在想这个问题。 在游戏中,这个问题可以用在随机战场分组上面。 根据每个角色的装备,等级,职业等等属性,计算每个角色的“战斗力”, 并找出实力最近的两组。

今天吃饭的时候无意中又想起这个问题,并试想了一下问题的答案:

首先,将每个玩家的战斗力从大到小排序,记为Pi (i = [1,n]), 然后将P1放到A组。 此时A组和B组的差距是P1。

为了弥补两组的差距,将剩下的P2--Pm个玩家放到B组,直到B组的总和大于或等于A组,如此循环往复,直到某一组人数满,将剩余的人添加到人数不满的一组,就能得到战斗力总和相差最小的两组人。

 

posted on 2014-02-02 13:45  glshader  阅读(1703)  评论(0编辑  收藏  举报