দেওয়া কাজ হল একটি দেওয়া বর্গাকার টুকরোকে মোট N সংখ্যক কাটা দিয়ে (হরিজন্টাল বা ভার্টিকাল) সমান আকারের বর্গ বা আয়তাকার সর্বোচ্চ কতটি টুকরোতে ভাগ করা যায় তা ক্যালকুলেট করা।
উদাহরণ দিয়ে বোঝা যাক
ইনপুট - N=8
আউটপুট - ২৫
ব্যাখ্যা - N=8 হলে, ভার্টিকাল কাটা = ৪ এবং হরিজন্টাল কাটা = ৪। মোট টুকরো = ২৫
| 1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 |
ইনপুট - ৭
আউটপুট - ২০
| 1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 |
প্রোগ্রামে ব্যবহৃত পদ্ধতি
যদি N কাটার সংখ্যা হয় এবং আমাদের ফলাফলের টুকরো ম্যাক্সিমাইজ করতে হয়, তবে সমান সংখ্যক হরিজন্টাল এবং ভার্টিকাল কাটা দিতে হবে।
যদি N জোড় হয় তবে সমান হরিজন্টাল ও ভার্টিকাল কাটা হবে, অন্যথায় যদি N বিজোড় হয়, তবে হরিজন্টাল কাটা ভার্টিকাল কাটার চেয়ে ১টি বেশি হবে বা بالعکس।
তাই, হরিজন্টাল কাটার সংখ্যা = N/2 এবং ভার্টিকাল কাটার সংখ্যা = N-H।
MaxPieces() ফাংশনে H = N/2 ইন্টিজার ভেরিয়েবল আরম্ভ করুন হরিজন্টাল কাটার সংখ্যা সংরক্ষণ করার জন্য।
V = N-H ইন্টিজার ভেরিয়েবল আরম্ভ করুন ভার্টিকাল কাটার সংখ্যা সংরক্ষণ করার জন্য।
ফাইনাল টুকরোর সংখ্যা = (হরিজন্টাল সারি) * (ভার্টিকাল সারি) = (H+1) * (V+1)
C++ প্রোগ্রাম উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int MaxPieces(int N){
// H হল হরিজন্টাল কাটার সংখ্যা
int H = N / 2;
// V হল ভার্টিকাল কাটার সংখ্যা
int V = N - H;
// সর্বোচ্চ টুকরোর সংখ্যা = (H+1)*(V+1)
return ((H + 1) * (V + 1));
}
// মেইন ফাংশন
int main(){
// কাটার সংখ্যা
int N = 7;
cout << "Max pieces = "<<MaxPieces(N);
return 0;
}
আউটপুট
20