欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

骨牌铺方格(HDU-2046)

发布时间:2025/3/17 编程问答 28 豆豆
生活随笔 收集整理的这篇文章主要介绍了 骨牌铺方格(HDU-2046) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Problem Description

    在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.

    例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:

    

Input

    输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。

Output

    对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。

Sample Input

1 3 2

Sample Output

1 3 2

思路:

设:用a[i]表示2*i的方格的方法数

已知:

    a[1]=1;

    a[2]=2;

    a[3]=3;

则:

    a[i]实质是在2*(i-1)的格子后加上一格2*1的方格,骨牌在这一格上横放或竖放。

    如果前面i-1块已经铺好,则第i块只有竖着放;

    如果前面i-1块已经铺好,则第i块只有横着放。

                                                                                         (图源网络 侵删致歉)

简单验证:
      规格为1时: 1种
      规格为2时: 2种
      规格为3时: 3种
      规格为4时: 5种
      规格为5时: 8种
               ……
可推:第 n 个的可能路径为  f(n)=f(n-1)+f(n-2)(斐波那契数列)

Source Program

#include<iostream> using namespace std; int main() {long long a[50];//注意用long longint n;int i;/*预处理,先求出斐波那契数列*/a[0]=1;a[1]=1;a[2]=2;for(i=3;i<=50;i++)a[i]=a[i-1]+a[i-2];while(cin>>n)cout<<a[n]<<endl;return 0; }

 

新人创作打卡挑战赛发博客就能抽奖!定制产品红包拿不停!

总结

以上是生活随笔为你收集整理的骨牌铺方格(HDU-2046)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。