- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
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
Domino and Tromino Tiling in C++
Suppose we have two types of shapes, Domino and Tromino. They can be rotated like below −
In a tiling, every square must be covered by a tile. Here two tilings are different if and only if there are two 4-directionally adjacent cells on the board such that exactly one of the tilings has both squares occupied by a tile.
Given N, then we have to find in how many ways we can tile 2xN board? So if the input is 3, then the output will be 5. So the arrangements can be [XYZ XXZ XYY XXY XYY] and [XYZ YYZ XZZ XYY XXY], here different letters are used for different tiles.
To solve this, we will follow these steps −
Make an array called dp of size N + 5, set dp[1] := 1, dp[2] := 2 and dp[3] := 5
for i in range 4 to N
dp[i] := 2*dp[i – 1] + dp[i – 3]
return dp[N]
Example(C++)
Let us see the following implementation to get a better understanding −
#include <bits/stdc++.h> using namespace std; const int MOD = 1e9 + 7; int add(int a, int b){ return ((a % MOD) + (b % MOD)) % MOD; } class Solution { public: int numTilings(int N) { vector <int> dp(N + 5); dp[1] = 1; dp[2] = 2; dp[3] = 5; for(int i = 4; i <= N; i++){ dp[i] = add(2 * dp[i - 1], dp[i - 3]); } return dp[N]; } }; main(){ Solution ob; cout << (ob.numTilings(3)); }
Input
3
Output
5
- Related Articles
- Tiling a Rectangle with the Fewest Squares in C++
- Domino Covering Board in Python
- Number of Equivalent Domino Pairs in Python
- What is the cost of tiling a rectangular plot of land ( 500 mathrm{~m} ) long and ( 200 mathrm{~m} ) wide at the rate of ( Rs. 8 ) per hundred sq. m.?
- Foreach in C++ and C#
- Comma in C and C++
- Loops in C and C++
- INT_MAX and INT_MIN in C/C++ and Applications
- strdup() and strdndup() in C/C++
- isalpha() and isdigit() in C/C++
- nextafter() and nexttoward() in C/C++
- Undefined Behaviour in C and C++
- rand() and srand() in C/C++
- Floating Point Operations and Associativity in C, C++ and Java
- # and ## Operators in C ?
