Related Articles
Count the number of ways to tile the floor of size n x m using 1 x m size tiles
• Difficulty Level : Medium
• Last Updated : 19 Apr, 2021

Given a floor of size n x m and tiles of size 1 x m. The problem is to count the number of ways to tile the given floor using 1 x m tiles. A tile can either be placed horizontally or vertically.
Both n and m are positive integers and 2 < = m.
Examples:

```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.```

This problem is mainly a more generalized approach to the Tiling Problem
Approach: For a given value of n and m, the number of ways to tile the floor can be obtained from the following relation.

```            |  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

 ``

Output:

`Number of ways = 5`

Time Complexity: O(n)
Auxiliary Space: O(n)
This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.