其他分享
首页 > 其他分享> > 骨牌铺方格(递推)

骨牌铺方格(递推)

作者:互联网

原题链接

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

本题是经典的递推问题,解决递推问题的精华在于分体问题的方法

思路一:

得出AC代码如下

#include <iostream>

using namespace std;

typedef long long LL;
LL dp[55];//防止越界

int main()
{
    int n;
    
    dp[1] = 1;
    dp[2] = 2;
    
    //打表 + 状态转移方程
    for (int i = 3;i <= 55;i++) dp[i] = dp[i - 1] + dp[i - 2];
    
    while (cin >> n)
    {
        cout << dp[n] << endl;
    }
    return 0;
}

但是,如果题目所给条件比较复杂,无法从前往后推出状态转移方程,那可以考虑从后往前推:

标签:格子,长方形,铺满,方格,骨牌,铺法,递推
来源: https://blog.csdn.net/smallrain6/article/details/113814392