【发布时间】:2013-02-24 08:39:28
【问题描述】:
我有一个由非负整数组成的n x m 矩阵。例如:
2 3 4 7 1
1 5 2 6 2
4 3 4 2 1
2 1 2 4 1
3 1 3 4 1
2 1 4 3 2
6 9 1 6 4
“投掷炸弹”将目标单元格及其所有八个相邻单元格的数量减少一,最小为零。
x x x
x X x
x x x
什么算法可以确定将所有单元格减少到零所需的最少炸弹数量?
B 选项(由于我不是一个细心的读者)
实际上,第一个版本的问题并不是我要寻找的答案。我没有仔细阅读整个任务,还有额外的限制,让我们说:
如果行中的序列必须是非递增的,那么简单的问题呢:
8 7 6 6 5 是可能的输入序列
7 8 5 5 2 是不可能的,因为 7 -> 8 依次增长。
也许为“更简单”的案例找到答案将有助于为更难的案例找到解决方案。
PS:我相信当我们有几个相同的情况需要最少的炸弹来清除上线时,我们会选择在行的“左侧”使用最多炸弹的一个。还有任何可能是正确的证据吗?
【问题讨论】:
-
好吧,我只是发现有些字段可以像示例中那样跳过 2 3 1 5 将其放在 2,3,1 上是没有意义的,因为放在它们上会导致一些子集损坏,我们可以通过放弃 5. 但找不到如何让它在全球范围内工作(如果它是正确的方式)。清除 2 需要使用 2 颗投在任何邻居身上的炸弹,而 5 则包含其他组的伤害。但是我不知道以后要做什么,因为当您重写它时(减少后),那么您有两个选择(没有一个超级组损坏)。
-
这是 NP 难的吗?它看起来是Maximum Coverage Problem 的变体。
-
这看起来有点像扫雷,除了你可以在一个点上多次放置炸弹,数字只表示在一个点上和周围的最小炸弹数量,而不是确切的数量。跨度>
-
也许你应该澄清一下,你说的问题是:
what's the minimum amount of bombs required to clean the board?这是否意味着不一定需要找到实际的轰炸模式,而只需要找到最少数量的炸弹? -
@us2012:找到可能的炸弹数量的下限和上限相当容易,如果它们匹配,则必须是所需的确切炸弹数量,无需计算即可找到实际的模式。但这种情况可能只会发生一次,如果有的话。
标签: algorithm language-agnostic matrix