【发布时间】:2019-11-19 22:37:04
【问题描述】:
我给出了一个大小为 5xN 的矩阵,其中很少有单元格被阻塞,我需要使用大小为 1x2 的图块填充矩阵,以使剩余的空单元格最少可能的。我们可以水平或垂直放置 1x2 瓷砖。 如果我在 cell(i,j) 处垂直放置瓷砖,那么我必须打印 1 (i,j) 否则打印 2 (i,j)强>。请看下面的例子:
......
..#..#
##.#.. # -> blocked cells
##.##. . -> empty cells
.####.
上述矩阵的解决方案是:
2 (0,0)
2 (0,2)
2 (0,4)
2 (1,0)
2 (1,3)
1 (2,2)
2 (2,4)
1 (3,5)
最终矩阵:
######
###### (only one cell left empty)
######
######
.#####
我尝试使用 BFS 解决,但它给了我时间限制,我可以使用什么其他方法来最佳地解决这个问题。
1
【问题讨论】:
-
假设,对于第 i 行中 2^5=32 个可能的占用/空闲单元格模式中的每一个,您知道通过放置多米诺骨牌可以填充的最大单元格总数,因此 ( a)他们在第 i 行产生这种模式,并且(b)没有多米诺骨牌延伸到第 i 行下方。现在,对于第 i+1 行中任何给定的占用/空闲单元格模式,您可以通过尝试扩展每个第 i 行模式的所有方法来计算遵守第 i+1 行相应约束的占用单元格的最大总数。同样对于有 2 个间隙的第 i 行模式,您只需尝试
=和||形状之一。
标签: algorithm dynamic-programming breadth-first-search