最大化获得的分数

时间:2014-09-01 17:36:09

标签: algorithm dynamic-programming

给出了一个n * n矩阵。

该行表示学生,相应的列表示在该特定论文中获得的标记。

例如 - >

n=3

1 2 3 

4 5 6

7 8 9

然后,第一名学生在第一篇论文中获得1分,在第二篇论文中获得2分,等等。

第二名学生在第一篇论文中获得4分,在第二篇论文中获得5分,等等。

给定 - >每个学生只能获得一篇试题来解决

我们需要最大限度地提高n名学生在上述条件下获得的总分。

对于上述输入,输出 - >>(8 + 6 + 1)= 15。

constraints->

1·; = N< = 100

My approach->

I thought to solve it using dp+bitmask but n can be as large as 100 so had to drop this idea.

1 个答案:

答案 0 :(得分:2)

这是典型的weighted bipartite graph问题,可以使用KM algorithm (Hungarian algorithm)解决。

为了构建二分法,我们将所有学生放在一组中,将所有考试试卷放在另一组中。我们将学生与具有价值边缘X的考试试卷联系起来,其中X是学生在该考试中可以获得的分数。构建图形后,只需运行KM算法即可得到答案。

这是一个tutorial from top coder,可以很好地解释这类问题,并且还提供了一个代码模板。你可以从这里开始:)