একটি অ্যারে এবং একটি সংখ্যা m দেওয়া আছে। অ্যারেতে m-উপাদানের দুটি সাবসেট বেছে নিতে হবে যাতে তাদের যোগফলের পার্থক্য সর্বোচ্চ হয়। সমাধান: অ্যারে সোর্ট করে সর্বোচ্চ m উপাদানের যোগফল এবং সর্বনিম্ন m উপাদানের যোগফলের পার্থক্য বের করা।
উদাহরণ
ইনপুট: arr = {1, 2, 3, 4, 5}, m = 3
আউটপুট: সর্বোচ্চ পার্থক্য: 6
ব্যাখ্যা: সর্বোচ্চ ৩টি: 3, 4, 5 → যোগফল ১২। সর্বনিম্ন ৩টি: 1, 2, 3 → যোগফল ৬। পার্থক্য = ১২ - ৬ = ৬।
ইনপুট: arr = {10, 13, 22, 8, 16, 14}, m = 4
আউটপুট: ২০
ব্যাখ্যা: সর্বোচ্চ ৪টি: 22, 16, 14, 13 → যোগফল ৬৫। সর্বনিম্ন ৪টি: 8, 10, 13, 14 → যোগফল ৪৫। পার্থক্য = ৬৫ - ৪৫ = ২০।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- অ্যারে arr[] এবং m ইনপুট।
- find_diff() ফাংশনটি অ্যারে সোর্ট করে প্রথম m এবং শেষ m উপাদানের যোগফলের পার্থক্য রিটার্ন করে।
- সোর্টেড অ্যারেতে প্রথম m টি = সর্বনিম্ন, শেষ m টি = সর্বোচ্চ।
C++ প্রোগ্রাম উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int find_diff(int arr[], int length, int m) {
sort(arr, arr + length);
int maxsum = 0, minsum = 0;
for (int i = 0; i < m; i++) {
minsum += arr[i];
maxsum += arr[length - i - 1];
}
return maxsum - minsum;
}
int main() {
int arr[] = {1, 1, 2, 3, 5, 7, 1};
int m = 3;
cout << find_diff(arr, 7, m);
return 0;
}
আউটপুট
12