我很难解决这个问题:
您会获得一个标注为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
?任何建议/解决方案都会非常有帮助和赞赏。