2013-10-04 76 views
-5

我们给出了2维网格的单元格。每个单元格可能包含或不包含怪物。需要的最小攻击次数

我们给出了一个包含怪物的单元格列表。

在单次攻击中,我们可以杀死连续或列中的所有怪物。我们 需要告诉摧毁所有怪物将需要的最小攻击次数。

约束:

1 ≤ N ≤ 1000 

1 ≤ X, Y ≤ 10^9 

例子:

输入:

3 

0 0 

1 0 

0 1 

输出:

2 

如何处理这个问题..?

+0

@Gray:他标记它的算法。 “你有什么尝试?”问题仍然相关,虽然 –

+2

是网格稀疏填充?否则,它是最短轴的长度。 – Jodrell

+0

@KarolyHorvath我认为实际的语言可能并不重要,但它可以有助于明确地知道它是否合意。 SO不是一般的算法吗?它不需要成为“软件算法”吗?我认为这种区别意味着它需要一些代码。 – Gray

回答

0

这让我想起了Set Cover Problem

您有一组U存储的N怪物:U = {1, 2, ..., N},可能的攻击一套S。每次攻击都是攻击杀死怪物的一组索引。在你的例子中,SS = { {1}, {2}, {}, {1}, {2} }。您必须在S中找到最小的集合C,其结合为U

+0

这个答案没有证明这个问题相当于Set Cover Problem。在这个问题中,并不是所有的集合都是可能的。例如,如果* a *和* b *但不是* c *在S的元素中,并且* b *和* c *但不是* a *在S的元素中,并且* b *和* d *是在S的元素中,则* d *在每个元素* a *和* b *中(与* b *和* a *相同的“行”)或* d *在每个元素* b *中* c *在(与* b *和* c *相同的“列”中)。 –

+0

我不想证明这是Set Cover Problem,但它可以用类似的方式建模。有些子集在S中是不可能的,但是这不会阻止你写S = {{a,b,d},{b,c}}并解决SCP。 – ChronoTrigger

+0

此问题不是NP完整的。 –