📌  相关文章
📜  计算使用 1 xm 大小的瓷砖来平铺 nxm 大小的地板的方法数量

📅  最后修改于: 2021-09-22 10:18:23             🧑  作者: Mango

给定大小为 nxm 的地板和大小为 1 x m 的瓷砖。问题是计算使用 1 xm 瓷砖铺设给定地板的方法数量。瓷砖可以水平或垂直放置。
n 和 m 都是正整数,并且 2 < = m。
例子:

Input : n = 2, m = 3
Output : 1
Only one combination to place 
two tiles of size 1 x 3 horizontally
on the floor of size 2 x 3. 

Input :  n = 4, m = 4
Output : 2
1st combination:
All tiles are placed horizontally
2nd combination:
All tiles are placed vertically.

这个问题主要是对平铺问题的一种更通用的方法。
方法:对于给定的 n 和 m 值,可以从以下关系中获得铺地砖的方式数量。

|  1, 1 < = n < m
 count(n) = |  2, n = m
            | count(n-1) + count(n-m), m < n
             
C++
// C++ implementation to count number of ways to
// tile a floor of size n x m using 1 x m tiles
#include 
 
using namespace std;
 
// function to count the total number of ways
int countWays(int n, int m)
{
 
    // table to store values
    // of subproblems
    int count[n + 1];
    count[0] = 0;
 
    // Fill the table upto value n
    for (int i = 1; i <= n; i++) {
 
        // recurrence relation
        if (i > m)
            count[i] = count[i - 1] + count[i - m];
 
        // base cases and for i = m = 1
        else if (i < m || i == 1)
            count[i] = 1;
 
        // i = = m
        else
            count[i] = 2;
    }
 
    // required number of ways
    return count[n];
}
 
// Driver program to test above
int main()
{
    int n = 7, m = 4;
    cout << "Number of ways = "
         << countWays(n, m);
    return 0;
}


Java
// Java implementation to count number
// of ways to tile a floor of size
// n x m using 1 x m tiles
import java.io.*;
 
class GFG {
 
    // function to count the total number of ways
    static int countWays(int n, int m)
    {
        // table to store values
        // of subproblems
        int count[] = new int[n + 1];
        count[0] = 0;
 
        // Fill the table upto value n
        int i;
        for (i = 1; i <= n; i++) {
 
            // recurrence relation
            if (i > m)
                count[i] = count[i - 1] + count[i - m];
 
            // base cases
            else if (i < m || i == 1)
                count[i] = 1;
 
            // i = = m
            else
                count[i] = 2;
        }
 
        // required number of ways
        return count[n];
    }
 
    // Driver program
    public static void main(String[] args)
    {
        int n = 7;
        int m = 4;
        System.out.println("Number of ways = "
                           + countWays(n, m));
    }
}
 
// This code is contributed by vt_m.


Python3
# Python implementation to
# count number of ways to
# tile a floor of size n x m
# using 1 x m tiles
 
def countWays(n, m):
     
    # table to store values
    # of subproblems
    count =[]
    for i in range(n + 2):
        count.append(0)
    count[0] = 0
     
    # Fill the table upto value n
    for i in range(1, n + 1):
     
        # recurrence relation
        if (i > m):
            count[i] = count[i-1] + count[i-m]
         
        # base cases
        elif (i < m or i == 1):
            count[i] = 1
 
        # i = = m
        else:
            count[i] = 2
     
     
    # required number of ways
    return count[n]
 
 
# Driver code
 
n = 7
m = 4
 
print("Number of ways = ", countWays(n, m))
 
# This code is contributed
# by Anant Agarwal.


C#
// C# implementation to count number
// of ways to tile a floor of size
// n x m using 1 x m tiles
using System;
 
class GFG {
 
    // function to count the total
    // number of ways
    static int countWays(int n, int m)
    {
 
        // table to store values
        // of subproblems
        int[] count = new int[n + 1];
        count[0] = 0;
 
        // Fill the table upto value n
        int i;
        for (i = 1; i <= n; i++) {
 
            // recurrence relation
            if (i > m)
                count[i] = count[i - 1]
                           + count[i - m];
 
            // base cases and i = m = 1
            else if (i < m || i == 1)
                count[i] = 1;
 
            // i = = m
            else
                count[i] = 2;
        }
 
        // required number of ways
        return count[n];
    }
 
    // Driver program
    public static void Main()
    {
        int n = 7;
        int m = 4;
 
        Console.Write("Number of ways = "
                      + countWays(n, m));
    }
}
 
// This code is contributed by parashar.


PHP
 $m)
            $count[$i] = $count[$i - 1] +
                         $count[$i - $m];
         
        // base cases
        else if ($i < $m or $i == 1)
            $count[$i] = 1;
 
        // i = = m
        else
            $count[$i] = 2;
    }
     
    // required number of ways
    return $count[$n];
}
 
    // Driver Code
    $n = 7;
    $m = 4;
    echo "Number of ways = ", countWays($n, $m);
 
// This code is contributed by ajit
?>


Javascript


输出:

Number of ways = 5

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程