【发布时间】:2014-05-01 20:34:11
【问题描述】:
我在一次采访中被问到这个问题。我正在稍微修改这个问题,以防止它被明确地谷歌,但要点是:
给你一个N x M 网格。网格中的一些单元格是“邪恶的”(用数字 1 表示),其余的是“好”的(用 0 表示)。您将激光定位在每个 N 行和每个 M 列上,当打开时会杀死它们各自行或列中的所有单元格,例如如果你有:
L1 L2 L3 L4
L5 0 1 0 0
L6 0 1 0 1
L7 0 1 1 0
L8 0 0 0 0
您可以开启任一(L2、L3、L4):
L1 L2 L3 L4
L5 0 x x x
L6 0 x x x
L7 0 x x x
L8 0 x x x
或者你可以开启(L2、L6、L7):
L1 L2 L3 L4
L5 0 x 0 0
L6 x x x x
L7 x x x x
L8 0 x 0 0
开启的一组激光称为“GoodConfig”,前提是它会杀死所有邪恶细胞。请注意,您始终可以打开一行或一列的所有激光并杀死所有东西,这将是“GoodConfig”,但打开激光很昂贵,杀死好的细胞是不好的。
“GoodConfig”的最小尺寸是多少,即在杀死所有邪恶细胞之前我们可以打开的最少激光数量?
什么是“GoodConfig”,可以最大限度地减少被杀死的好细胞的数量?
【问题讨论】:
-
This question 似乎基本相同。
-
当R=C=1 community.topcoder.com/stat?c=problem_statement&pm=12447时看起来像这个问题
-
@01zhou:我似乎记得与 TopCoder 上的问题完全相同的问题,电路板尺寸高达 18x18(这样 2^18 * 18 的解决方案也可以通过),但找不到就在此刻。
-
我认为 18 太低了......这个问题似乎非常接近运行在 O(n^3) 中的匈牙利算法,你可以轻松地运行它 n = 1000。
-
@wrick:当然,二分匹配(和二分最小顶点覆盖)在 O(n^3) 中很简单,在 O(n^2*sqrt(n)) 中更技术性一点。请注意我评论中的“这样 2^18 * 18 的解决方案也会通过”部分。
标签: algorithm