骨牌覆盖问题

 骨牌覆盖问题,就是用  1x2 大小的骨牌,铺设一个给定大小的一个矩形区域,要求必须铺满,且不可以超出边界。问总的铺设方案数位多少?

   这一类问题就是骨牌覆盖问题。


不同规模的数据有不同的方法。


  

   下面来看看最简单的   2×N  区域里面的铺设方法数。

N=0,一种;  N=1 为一种 ; N=2,两种;N=3,5种;

较为容易看出是斐波拉契数列;所以快速幂矩阵求斐波拉契数列;如果看不出来为什么是菲波拉契数的可以放一放,看看下面的3×n的方法之后,你就可以试着来证明2×N的为什么是这个数列。


   再来看看  3×N;我们可以来腿一下递推关系。我们可以假设我们已经放好 i 行的骨牌,即将要放 第 i+1 行的骨牌。则第 i 行的骨牌状态有


有这8中状态。 上一行的某一种状态能不能到这种状态,需要一个对应关系。用一个二维数组记录到这个状态的方案数。

       所以一开始用二维数组记录


数组行数代表在第几排,列数代表该一排的某一状态。一次一次递推下去便可以。

我们刚刚说了需要一个状态的对应关系,那个关系是上一个状态能否得到这个状态,我把这个关系用箭头表示,能到达的状态用箭头来指向它。

我们得到这幅对应关系,就是得到了递推关系。所以,我们可以根据这幅图构造一个矩阵。

便得到这个矩阵。



然后矩阵快速幂;

便可以求出答案;



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值