想象一下,你有一个填充了正值的n-by-m网格。您从网格中选择最小(n,m)方块,在拾取时消除方形的行和列。您的分数就是您选择的方格中的某些值。我试图找到最大可能分数。除了经历所有可能性之外,还有什么方法可以做到这一点吗?如果我必须列举所有内容,那么最有效的方法是什么?我试图在python中实现这个,如果这有所不同。感谢。
答案 0 :(得分:1)
这相当于finding a maximum matching in a weighted bipartite graph。行和列对应于图的节点,如果table[u][v]
具有非零值x
,则行节点u和列节点v之间的边缘为权重x。在最大匹配中选择的边对应于要选择的非零单元;如果匹配中的边缘少于min(n, m)
,则表格单元格的其余选项的值均为零,因此您可以任意选择剩余的单元格。 (如果表格中有负数条目,则您必须向上调整所有表格条目,以确保在构建图表之前所有条目都是非负数。)
NetworkX和igraph等图表库提供加权最大匹配算法的实现,因此您可以将表格转换为图表,并将困难的工作委托给图书馆。