# Count the number of ways to tile the floor of size n x m using 1 x m size tiles

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

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

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; ` ` `  `    ``// 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; ` ` `  `        ``// 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 ` `?> `

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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Improved By : parashar, jit_t, AnindyaSen

Article Tags :
Practice Tags :

28

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.