0

问题

我有一张运动成绩表,正在寻找在每一轮中选择一支球队的最佳方法,以使相关分数的总和最大。此选择受以下约束:

  • 球队的数量与轮次一样多
  • 您必须选择每支球队一次且仅一次,并且每轮仅进行一次选择
  • 有些球队在某些回合中不会是合法的选择

细节

特定球队在特定回合中的得分是他们参加的比赛的分差。如果他们赢了,则为正数,如果他们输了,则为负数

给定的选择可能被禁止有两个可能的原因。可能永远不会选择排名最低的球队的对手(可能会在轮次之间改变)。在某些比赛中可能会出现轮空,受影响的球队也可能不会被选中。

例子

考虑以下示例,括号中的数字是该球队在该轮比赛中的得分,而*表示与排名垫底的球队比赛的球队,因此无法在该轮比赛中被选中。

Round 1: Team A* (+26) vs Team B  (-26), Team C  (-15) vs Team D  (+15)
Round 2: Team A  (+75) vs Team C  (-75), Team B  (+ 5) vs Team D* (- 5)
Round 3: Team A  (+85) vs Team D  (-85), Team B* (- 3) vs Team C  (+ 3)
Round 4: Team A  (  0) vs Team B  (  0), Team C  (+12) vs Team D* (-12)

在这种情况下,最好的组合是选择:

  1. 第一轮:D(+15)
  2. 第二轮:B(+5)
  3. 第三轮:A(+85)
  4. 第4轮:C(+12)

注意:我创建的示例不包括任何带轮空的回合。它也不需要为可能的最佳总分选择负分,尽管这显然是可能的。

已知解决方案

显然,在团队或回合数较少的情况下,您可以通过尝试每种组合来强制执行此操作。有没有办法为更多的团队和回合(比如 20 个?)解决这个问题。

4

1 回答 1

1

您基本上是在描述一个分配问题:您正在寻找团队和回合之间的完美匹配,以使与匹配边缘相关的分数总和最大化。可以使用 -∞ 的 socre 对禁止底球队进行建模。匈牙利算法是解决这类问题的一种既定方法。

于 2013-07-15T09:33:05.003 回答