-5

我们得到了二维网格单元格。每个单元格可能包含也可能不包含怪物。

我们得到一个包含怪物的单元格列表。

在一次攻击中,我们可以杀死所有排成一排或一列的怪物。我们需要知道摧毁所有怪物所需的最少攻击次数。

约束:

1 ≤ N ≤ 1000

1 ≤ X, Y ≤ 10^9

例子:

输入:

3

0 0

1 0

0 1

输出:

2

如何解决这个问题..?

4

2 回答 2

3

这可以建模为图问题。

为存在怪物的每一行和每一列创建一个图形节点。如果怪物在该行和该列上,则连接节点。

这是一个二分图,你想做最小的顶点覆盖。König 定理表明,对于二部图,该问题等价于可以在多项式时间内解决的最大匹配问题:

http://en.wikipedia.org/wiki/Maximum_matching#Maximum_matchings_in_bipartite_graphs

于 2013-10-04T14:09:21.333 回答
0

这让我想起了Set Cover 问题

你有一个U存储N怪物的集合:U = {1, 2, ..., N},一组S可能的攻击。每次攻击也是该攻击杀死的怪物的一组指标。在您的示例中,SS = { {1}, {2}, {}, {1}, {2} }. 您必须找到其并集为C的最小集合。SU

于 2013-10-04T13:58:38.563 回答