দুটি সংখ্যা n এবং m দেওয়া আছে যেগুলো একটি ঘরের ফ্লোরের দৈর্ঘ্য এবং প্রস্থ নির্দেশ করে। লক্ষ্য হলো এই ফ্লোরকে 1xm আকারের টাইল দিয়ে কতভাবে টাইল করা যায় সেটি বের করা।
উদাহরণ ১
ইনপুট
n=3 m=2
আউটপুট
১ x m আকারের টাইল দিয়ে n x m আকারের ফ্লোর টাইল করার পদ্ধতির সংখ্যা: 3
ব্যাখ্যা
পদ্ধতিগুলো হবে তিনটি ১x২ টাইল নিচের ছবির মতো সাজানো:

উদাহরণ ২
ইনপুট
n=3 m=3
আউটপুট
১ x m আকারের টাইল দিয়ে n x m আকারের ফ্লোর টাইল করার পদ্ধতির সংখ্যা: ২
ব্যাখ্যা
পদ্ধতিগুলো হবে তিনটি ১x৩ টাইল খাড়া এবং বাঁকা করে সাজানো। মাত্র দুই পদ্ধতি।
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে n-এর মান চেক করা হয়। যদি n, m-র চেয়ে ছোট হয় এবং মান ১ হয়, তবে ফ্লোরের উপরে ১xm আকারের একটিই টাইল থাকবে।
যদি n, m-র সমান হয়, তবে ২টি পদ্ধতি হবে: n টি ১xm টাইল সব খাড়া এবং সব বাঁকা করে রাখা। যদি n, m-র চেয়ে বড় হয়, তবে আগের পদ্ধতিগুলো ব্যবহার করে ways[n-1] + ways[m-1] দিয়ে পদ্ধতি গণনা করা হয়।
ফ্লোর এবং টাইলের মাপের জন্য ইন্টিজার
mএবংnনিন।ways_tile_floor(int N, int M)ফাংশনটি মাপগুলো গ্রহণ করে টাইল করার পদ্ধতির সংখ্যা রিটার্ন করে।N+1দৈর্ঘ্যের অ্যারেarr[]নিন ইনডেক্সi=বর্তমানNএর জন্য টাইল কাউন্ট রাখার জন্য।arr[0]-এ টাইল ০, তাইarr[0]=0।forলুপ দিয়েi=1থেকেi=Nপর্যন্তarr[]ট্রুভার্স করুন। প্রতিটিarr[i]-এর জন্য, যদিi>Mহয় তবে আগের মানগুলো ব্যবহার করে কাউন্ট করুন:arr[i] = arr[i-1] + arr[i-M]।যদি
i=1অথবাiহয়, তবে arr[i]১ সেট করুন।যদি
i=Mহয়, তবেarr[i]=2সেট করুন।forলুপ শেষেarr[N]-এ টাইল সাজানোর পদ্ধতির কাউন্ট থাকবে।arr[N]রিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#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 << "১ x m আকারের টাইল দিয়ে n x m আকারের ফ্লোর টাইল করার পদ্ধতির সংখ্যা: " << ways_tile_floor(n, m);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
১ x m আকারের টাইল দিয়ে n x m আকারের ফ্লোর টাইল করার পদ্ধতির সংখ্যা: 3