4xN多米诺骨牌砖的组合数量

时间:2012-05-23 21:12:46

标签: algorithm dynamic-programming

我想找到使用动态编程的4 x N区域(4个单位宽度和N个单位高度,N≥1)的多米诺骨牌的可能不同组合的数量。

Domino砖的大小为2x1,例如

==

表示水平和

|
|

垂直砖。

现在,

示例4x1(彼此之下的两块多米诺骨牌)

====

4x2砖配置示例(共5个)

1)

||||
||||

2)(在右边翻两块砖)

||==
||==

3)

|==|
|==|

4)

====
====

5)

==||
==|| 

目前已知的独特组合数量

4x1 : 1 possibility
4x2 : 5 possibilites
4x3 : 11 possibilites
4x4 : 36 possibilites

2 个答案:

答案 0 :(得分:2)

解决一个更普遍的问题。找到平铺4×N网格的方法的数量,其中顶行中的某些位置可能被占用。将每个位置与2的幂相关联,最左边对应于1,第二个2,第三个4,最右边8.让T(N,k)为4×N网格的倾斜数,其中对应于k的位置在顶行已被占用。 k == 0表示没有占用位置,k == 6表示两个中间位置被占用(6 = 2 + 4)等。

然后找到转换,当填充顶行的其余部分时,下一行中的哪些模式可以通过多少种方式访问​​?

例如,如果中间的两个位置被占用,填充顶行剩余部分的唯一方法是将domino垂直放置在最左边和最右边的位置,导致

|xx|
|  |

以及下一行中两个最外面的位置被占用的配置,对应于1+8 = 9,因此T(N,6) = T(N-1,9)。对于k == 9,我们从开始的情况看起来

|  |

我们有两种可能性,

|==|     ||||
          ||

我们可以通过水平放置一个多米诺骨牌来填补空白,让下一行完全自由,或者垂直放置两个多米诺骨牌,占据下一行的两个中间位置,所以

T(N,9) = T(N-1,0) + T(N-1,6)

使用这些过渡来构建T(n,k)

的表格

您要查找的值为T(N,0)

答案 1 :(得分:1)

F[n] = number of ways to tile a 4-by-n grid
G[n] = number of ways to tile a 4-by-n grid with top-right and bottom-right
    squares uncovered
H[n] = number of ways to tile a 4-by-n grid with bottom-right 2
        squares uncovered
  = number of ways to tile a 4-by-n grid with top-right 2
        squares uncovered
if n >= 2, the right end of any tiling can be
    two vertical dominoes (F[n-1] ways)
    horz, horz vert (H[n-1] ways)
    horz, vert, horz (G[n-1] ways)
    vert, horz, horz (H[n-1] ways)
    4 horizontal dominoes (F[n-2] ways)
 F[n] = F[n-1] + G[n-1] + 2*H[n-1] + F[n-2];
 For G: the right end can be a vertical domino (F[n-1] ways)
        or two horizontal dominoes => top & bottom are horz = G[n-2]
        G[n] = F[n-1] + G[n-2];
 For H: the right end can be a vertical domino (F[n-1] ways)
        or two horizontal dominoes (H[n-1] ways)
        H[n] = F[n-1] + H[n-1];
 F[0] = 1, F[1] = 1, G[0] = 0, G[1] = 1, H[0] = 0, H[1] = 1

希望它有所帮助!!