zoukankan      html  css  js  c++  java
  • 骨牌覆盖问题

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

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


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


      

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

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

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


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


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

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


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

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

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

    便得到这个矩阵。



    然后矩阵快速幂;

    便可以求出答案;



  • 相关阅读:
    ubutu安装phonegap 后出现/usr/bin/env:node No such file or directory的错误
    Ubuntu 14.04 x64 安装 Android SDK
    ubuntu64安装ia32-libs
    redis 配置
    flask部署阿里云
    爬虫数据存储
    selnuim 使用
    python 爬虫解析_1_
    scrapy 数据存储mysql
    scrapy 小案例
  • 原文地址:https://www.cnblogs.com/coded-ream/p/7207970.html
Copyright © 2011-2022 走看看