骨牌问题

在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

分析:
dp[i]表示铺满2*i的长方形方格,一共有多少方案数,
dp[n]=dp[n-1]+dp[n-2],铺到最后要么剩2*2或者1*2
dp[n-1]表示前2*(n-1)已铺满,剩最后1*2只能竖着放
dp[n-2]为铺满2*(n-2)网格的方案数(如果前面的2*(n-2)的网格已经铺满
那么最后的2*2只能是横着放两块,否则会与dp[n-1]重复).
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n;
long long dp[51];  ///要使用long long ,int 不够用
dp[1]=1;
dp[2]=2;
while(cin>>n)
{
    for(int i=3;i<=52;i++)
    {
        dp[i]=dp[i-1]+dp[i-2];
    }
    cout<<dp[n]<<endl;
}

    return 0;
}


版权声明:本文为dongjian2原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。