📜  平铺问题

📅  最后修改于: 2021-04-30 02:40:55             🧑  作者: Mango

给定一块“ 2 x n”板和尺寸为“ 2 x 1”的砖块,计算使用2 x 1砖块对给定板块进行铺砖的方法数量。一个图块可以水平放置(即1 x 2图块),也可以垂直放置(例如2 x 1图块)。

例子:

平铺问题

执行 –

令“ count(n)”为在“ 2 x n”网格上放置图块的方式的计数,我们有以下两种方式来放置第一个图块。
1)如果我们垂直放置第一个图块,则问题将减少为“ count(n-1)”
2)如果我们将第一个图块水平放置,那么我们也必须将第二个图块也水平放置。因此问题减少到“ count(n-2)”
因此,count(n)可以写成如下形式。

count(n) = n if n = 1 or n = 2
   count(n) = count(n-1) + count(n-2)

这是上述方法的代码:

C++
// C++ program to count the
// no. of ways to place 2*1 size
// tiles in 2*n size board.
#include 
using namespace std;
 
int getNoOfWays(int n)
{
    // Base case
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
 
    return getNoOfWays(n - 1) + getNoOfWays(n - 2);
}
 
// Driver Function
int main()
{
    cout << getNoOfWays(4) << endl;
    cout << getNoOfWays(3);
    return 0;
}


输出:

3
2