使用无限可用的H * 1和1 * H瓷砖拼接W * 2H-1地板

时间:2014-12-15 05:17:47

标签: algorithm dynamic-programming

我很难解决这个问题:

您会获得一个标注为H * 1的图块和一个标注W * (2H-1)的图块。你需要找出所有可能的方法用给定的瓷砖平铺地板。宽度W保证是H的倍数,因此这总是可行的。

输入: W,H
输出:平铺地板的方法数量。

我正在尝试动态编程,并且难以找出子问题并编写重复。以下是我的方法:

考虑地板的角落。瓷砖可以水平或垂直布置。使用这种二分法,重现是:

如果H 甚至

f[W][0] = f[w-H][0] + 2.{ f[W-H][1]+f[W-H][2]+...+f[W-H][H/2] }

如果H 奇数

f[W][0] = f[W-H][0] + 2.{ f[W-H][1]+f[W-H][2]+...+f[W-H][floor(H/2)] } + f[W-H][ceil(H/2)]   

其中

f[W][0] = No. of ways of tiling floor of dimension (W*(2H-1)) with H*1 tiles.

f[W][i] = No. of ways of tiling floor of dimension (W*(2H-1)) with 1 extra tile at 'i'th position in horizontal position at bottommost row. 

下面是f [W] [1]

的图表
-1 2 3 4 5 ... (2H-1)

1 _ _ _ _ _ ... _

2 _ _ _ _ _ ... _

3 _ _ _ _ _ ... _

.

.

.

W _ _ _ _ _ ... _

           _(This tile is laid out horizontally here)

如何进一步细分子问题f[W-H][i] for 0 < i <= H/2?任何建议/解决方案都会非常有帮助和赞赏。

0 个答案:

没有答案