ধরুন n সংখ্যক অবজেক্টের একটি অ্যারে আছে, প্রতিটির প্রস্থ W[i]। এগুলো পিরামিড আকারে সাজাতে হবে যেন:
- i-তম লেভেলের মোট প্রস্থ (i+1)-তম লেভেলের প্রস্থ থেকে কম।
- i-তম লেভেলের অবজেক্টের সংখ্যা (i+1)-তম লেভেলের সংখ্যা থেকে কম।
উদাহরণস্বরূপ, প্রস্থগুলো [40, 100, 20, 30] হলে আউটপুট হবে ২। শীর্ষে ৩০, তার নিচে ২০, ৪০ এবং ১০০ থাকবে।
কম প্রস্থের অবজেক্টগুলো শীর্ষে রাখা হয়, এরপর ক্রমাগত বড় প্রস্থ এবং বেশি সংখ্যক অবজেক্ট लेकर নিচের লেভেলগুলো তৈরি করা হয়। এর জন্য অ্যারেটি সর্ট করে উপরে থেকে নিচে পিরামিড তৈরি করা হয়।
#include <iostream>
#include <algorithm>
using namespace std;
int maxLevelPyramid(int objects[], int n) {
sort(objects, objects + n);
int ans = 1;
int prev_w = objects[0];
int count_p = 1;
int count_c = 0;
int curr_w = 0;
for (int i = 1; i < n; i++) {
curr_w += objects[i];
count_c++;
if (curr_w > prev_w && count_c > count_p) {
prev_w = curr_w;
count_p = count_c;
count_c = curr_w = 0;
ans++;
}
}
return ans;
}
int main() {
int boxes[] = {40, 100, 20, 30};
int n = sizeof(boxes)/sizeof(boxes[0]);
cout << "Max level of pyramid: " << maxLevelPyramid(boxes, n);
}
Max level of pyramid: 2