- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count the number of ways to tile the floor of size n x m using 1 x m size tiles in C++
Given two numbers n and m representing the length and breadth of the floor of a room. The goal is to count the number of ways in which this floor can be tiled using the tiles of size 1Xm.
For Example
Input
n=3 m=2
Output
Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: 3
Explanation
The ways will be three 1x2 tiles arranged as shown below −
Input
n=3 m=3
Output
Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: 2
Explanation
The ways will be three 1x3 tiles arranged vertically and horizontally. Only two ways.
Approach used in the below program is as follows −
In this approach we check the value of n. If n is less than m and has value 1 then there will be only one tile to be placed all over the floor of size 1Xm.
If n is equal to m then there will be 2 ways, placing n 1xm tiles all vertically and all horizontally. If n is greater than m then we will calculate ways using previous ways − ways[n−1]+ways[m−1].
Take integers m and n for the dimensions of the floor and tiles.
Function ways_tile_floor(int N, int M) takes the dimensions and returns the number of ways to tile the floor of size n x m using 1 x m size tiles.
Take an array arr[ ] of length N+1 to store count of tiles for index i=current value of N.
For arr[0] tiles will be 0. So arr[0]=0.
Traverse arr[] using for loop from i=1 to i=N. For each arr[i], if i>M then calculate count using previous values. arr[i]=arr[i − 1] + arr[i − M].
In case i=1 and or i<M, set arr[i] with 1.
In case i=M, set arr[i]=2.
At the end of the for loop, arr[N] will have a count of ways of arranging tiles.
Return arr[N] as result.
Example
#include <bits/stdc++.h> using namespace std; int ways_tile_floor(int N, int M){ int arr[N + 1]; arr[0] = 0; for (int i = 1; i <= N; i++){ if (i > M){ arr[i] = arr[i − 1] + arr[i − M]; } else if (i < M || i == 1){ arr[i] = 1; } else { arr[i] = 2; } } return arr[N]; } int main(){ int n = 3, m = 2; cout<<"Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: "<<ways_tile_floor(n, m); return 0; }
Output
If we run the above code it will generate the following output −
Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: 3