এই সমস্যাতে, আমাদের একটি অ্যারে arr[] এবং দুটি পূর্ণসংখ্যা M ও K দেওয়া আছে। আমাদের কাজ হলো দেওয়া অ্যারের উপাদান ব্যবহার করে একটি নতুন অ্যারে তৈরি করা। নতুন অ্যারের সাইজ হবে M এবং K-র চেয়ে বড় আকারের কোনো সাব-অ্যারে-তে সব উপাদান একসামান থাকতে পারবে না। আমাদের তৈরি অ্যারেটির সর্বোচ্চ সম্ভাব্য যোগফল বের করতে হবে।
উদাহরণ:
ইনপুট - arr[] = {1, 2, 4, 5, 7}, M = 5, K = 2
ব্যাখ্যা - শর্ত পূরণকারী তৈরি অ্যারে: {7, 7, 5, 7, 7}। এখানে আকার ২-র চেয়ে বড় কোনো সাব-অ্যারেতে সব উপাদান একসামান নেই।
সমাধানের জন্য, সর্বোচ্চ মানযুক্ত উপাদান ব্যবহার করে অ্যারে তৈরি করতে হবে। কিন্তু সর্বোচ্চ মান K বার سے বেশি ব্যবহার করা যাবে না, তাই K বার পর পর دوم সর্বোচ্চ মান ব্যবহার করতে হবে। প্রতি K টি সর্বোচ্চ মানের পর একটি دوم সর্বোচ্চ মান বসিয়ে M দৈর্ঘ্যের অ্যারে তৈরি করলে তার যোগফলই উত্তর হবে।
উদাহরণ
সমাধানের প্রোগ্রাম:
#include <iostream>
using namespace std;
long int arraySum(int arr[], int n, int m, int k) {
int max1 = arr[0], max2 = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max1) {
max2 = max1;
max1 = arr[i];
} else if (arr[i] > max2)
max2 = arr[i];
}
int max2count = m / (k + 1);
long int sum = max2count * max2 + (m - max2count) * max1;
return sum;
}
int main() {
int arr[] = { 1, 3, 6, 7, 4, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
int m = 9, k = 2;
cout << "The maximum sum of array created from the given array such that no subarray of size greater ";
cout << "than " << k << " will have same elements is ";
cout << arraySum(arr, n, m, k);
return 0;
} আউটপুট
The maximum sum of array created from the given array such that no subarray of size greater than 2 will have same elements is 60