骨牌覆盖问题,就是用 1x2 大小的骨牌,铺设一个给定大小的一个矩形区域,要求必须铺满,且不可以超出边界。问总的铺设方案数位多少?
这一类问题就是骨牌覆盖问题。
不同规模的数据有不同的方法。
下面来看看最简单的 2×N 区域里面的铺设方法数。
N=0,一种; N=1 为一种 ; N=2,两种;N=3,5种;
较为容易看出是斐波拉契数列;所以快速幂矩阵求斐波拉契数列;如果看不出来为什么是菲波拉契数的可以放一放,看看下面的3×n的方法之后,你就可以试着来证明2×N的为什么是这个数列。
再来看看 3×N;我们可以来腿一下递推关系。我们可以假设我们已经放好 i 行的骨牌,即将要放 第 i+1 行的骨牌。则第 i 行的骨牌状态有
有这8中状态。 上一行的某一种状态能不能到这种状态,需要一个对应关系。用一个二维数组记录到这个状态的方案数。
所以一开始用二维数组记录
数组行数代表在第几排,列数代表该一排的某一状态。一次一次递推下去便可以。
我们刚刚说了需要一个状态的对应关系,那个关系是上一个状态能否得到这个状态,我把这个关系用箭头表示,能到达的状态用箭头来指向它。
我们得到这幅对应关系,就是得到了递推关系。所以,我们可以根据这幅图构造一个矩阵。
便得到这个矩阵。
然后矩阵快速幂;
便可以求出答案;
本文探讨了使用1x2骨牌铺满2×N及3×N矩形区域的不同方案数量,通过分析发现2×N情况下的解决方案数目遵循斐波那契数列,并详细介绍了3×N情况下的递推关系及其对应的矩阵快速幂求解方法。
2593

被折叠的 条评论
为什么被折叠?



