在一个3 X N的长方形方格中,铺满1X2的骨牌(骨牌个数不限制),给定N,求方案数

动态规划_all_plus

1. 2*N

这是一个经典的递推问题,如果觉得无从下手,我们可以来看一个更加简单的问题,把问题中的“3”变成“2”(即在一个2XN的长方形方格中铺满1X2的骨牌的方案)。这样问题就简单很多了

假设用f[i]表示2*i的方格一共有组成的方法数,我们知道arr[1]=1;arr[2]=2;
   现在假设我们已经知道了f[i-1]和f[i-2],求arr[i],所谓f[i],不过是在2*(i-1)的格子后边加上一格2*1的方格罢了,骨牌在这一格上横着放,竖着放,如果前面i-1块已经铺好,则第i块只有一种铺法,就是竖着放,如果要横着放,也只有一种铺法,不过要求前面i-2块已经铺好!
 因此f[i]=f[i-1]+f[i-2];

默认(i-2)不存在两个连续竖排,因为和(i-1)假设前面(i-1)块已经铺好冲突

所以可以得到递推式f[i] = f[i-1] + f[i-2] (i >= 2),并且边界条件f[0] = f[1] = 1。 

2.3*N

首先可以明确当N等于奇数的时候,方案数一定为0

f[i][0] = f[i-2][0] + f[i-1][1] + f[i-2][2]  

      f[i][1] = f[i-1][2]

      f[i][2] = f[i][0] + f[i-1][1]

      边界条件     f[0][0] = f[1][1] = f[0][2] = 1

状态:用f[i][j]表示(3 X i) + j个多余块的摆放方案数

例:当N = 4:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章