码迷,mamicode.com
首页 > 其他好文 > 详细

贴瓷砖问题

时间:2020-01-21 19:46:25      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:color   https   pre   不能   bsp   取值   turn   cci   art   

问题描述:

  现有2*n的地板,1*1的地砖,2*1的地砖,请问将地板铺满共有多少种铺法?

 

思路:

  第一步,算出只用2*1的地砖铺满房间的数量;第二步,用1*1的地砖替换2*1的地砖,排列组合的总数乘以第一步中的数量。

 

解法:

第一步:

  n=1时,f(1)=1

  n=2时,f(2)=2

  当n=3时,进行分析,第一款砖若是竖着放,则剩下一个2*2的空间,问题转化为n=2;第一块砖若是横着放,则第二块砖的位置也固定了,剩下一个2*1的空间,问题转化为n=1,所以可得f(3)=f(2)+f(1)

  当n=4时,同上分析,第一块若竖着放,则剩下一个2*3的空间,方法为n=3的方法数;第一块砖若横着放,则第二块砖的位置也固定了,剩下一个2*2的空间,问题转化为n=2,所以可得f(4)=f(3)+f(2)

  符合斐波那契数列

  f(n)=f(n-1) + f(n-2)

double FibonacciSqe(int n)
{  
    double dR = sqrt(5);
    double res = 0;
    if(n > 1)
    {
        res = 1/dR * (pow(((1+dR)/2),n) - pow(((1-dR)/2),n)) + 1;
    }
    else
    {
        res = 1/dR * (pow(((1+dR)/2),n) - pow(((1-dR)/2),n));
    }   
    
    return res;
}

  FibonacciSqe(n)返回f(n)的值,代表只用2*1的地砖铺满地板需要的数量;

 

第二步:

  设A为1*1的地砖,B为2*1的地砖;

  用A替换B,在n块B中选出x块B,作为被替换目标。x取值范围:1~n;

  x=1时,选出C11块,Sum(1)=1,即B被替换有1种选法

  x=2时,选出C20+C21+C22块,Sum(2)=4,即B被替换有4种选法

  x=3时,选出C30+C31+C32+C33块,Sum(3)=8,即B被替换有8种选法

  ......

   x=n时,Sum(n)= Cn0+Cn1+Cn2+...+Cnn-1+Cnn = 2^n,即B被替换有2^n种选法

 

  所以总铺法 = 只用B铺的方法数量F(n)=FibonacciSqe(n)  乘以  A替换B的排列组合数量Sum(n);

  即,

    result=F(n)*Sum(n)

  这里要考虑特殊情况:x=n时,B全部被A替换,此时只有1种铺法,所以不能计入乘数,要用Sum(n)-1,且最后加上一种全部铺A的铺法

  即,

    result=F(n)*(2^n - 1) + 1

 

参考:https://blog.csdn.net/zyn2609530/article/details/51898572

贴瓷砖问题

标签:color   https   pre   不能   bsp   取值   turn   cci   art   

原文地址:https://www.cnblogs.com/Brickert/p/12222447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!