ধরুন আমাদের দুটি ধরণের আকার রয়েছে, ডমিনো এবং ট্রোমিনো৷ তাদের নিচের মত ঘোরানো যেতে পারে −

একটি টাইলিং মধ্যে, প্রতিটি বর্গক্ষেত্র একটি টালি দ্বারা আবৃত করা আবশ্যক। এখানে দুটি টাইলিং আলাদা হয় যদি এবং শুধুমাত্র যদি বোর্ডে দুটি 4-দিক-নির্দেশক সংলগ্ন কক্ষ থাকে যাতে ঠিক একটি টাইলিংয়ের উভয় বর্গক্ষেত্র একটি টাইল দ্বারা দখল করে থাকে।
N দেওয়া হয়েছে, তাহলে আমাদের খুঁজে বের করতে হবে কত উপায়ে আমরা 2xN বোর্ড টালি করতে পারি? সুতরাং যদি ইনপুট 3 হয়, তাহলে আউটপুট হবে 5। সুতরাং বিন্যাসগুলি [XYZ XXZ XYY XXY XYY] এবং [XYZ YYZ XZZ XYY XXY] হতে পারে, এখানে বিভিন্ন টাইলের জন্য বিভিন্ন অক্ষর ব্যবহার করা হয়েছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
N + 5 আকারের dp নামে একটি অ্যারে তৈরি করুন, সেট করুন dp[1] :=1, dp[2] :=2 এবং dp[3] :=5
-
আমি রেঞ্জ 4 থেকে N
এর জন্য-
dp[i] :=2*dp[i – 1] + dp[i – 3]
-
-
dp[N>
ফেরত দিন
উদাহরণ(C++)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#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));
} ইনপুট
3
আউটপুট
5