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: