এই সমস্যাতে, আমাদের দুটি অ্যারে arr1[] এবং arr2[], এবং দুটি সংখ্যা N এবং M দেওয়া আছে।
- N হল arr1 থেকে নেওয়া উপাদানের সংখ্যা।
- M হল arr2 থেকে নেওয়া উপাদানের সংখ্যা।
আমাদের arr1[i] থেকে arr2[i] পর্যন্ত একটি উপাদান বেছে নিতে হবে, যাতে যোগফল সর্বোচ্চ হয়, কিন্তু arr1 থেকে সর্বোচ্চ N এবং arr2 থেকে সর্বোচ্চ M সংখ্যক উপাদান নেওয়া যাবে।
আমাদের কাজ হল দুটি অ্যারে থেকে ক্রমানুসারে উপাদান বেছে নেয়ার সর্বোচ্চ যোগফল খুঁজে বের করার C++ প্রোগ্রাম তৈরি করা।
arr1[] = {5, 1, 6, 2, 8, 9}
arr2[] = {8, 4, 7, 9, 1, 3}
M = 3, N = 2
28
বেছে নেওয়া উপাদানগুলো: i = 0, arr1[0] = 5, arr2[0] = 8. উপাদান: 8 i = 1, arr1[1] = 1, arr2[1] = 4. উপাদান: 4 i = 2, arr1[2] = 6, arr2[2] = 7. উপাদান: 6 i = 3, arr1[3] = 2, arr2[3] = 9. উপাদান: 2 i = 4, arr1[4] = 8, arr2[4] = 1. উপাদান: 8 maxSum = 8 + 4 + 6 + 2 + 8 = 28
সমস্যা সমাধানের একটি পদ্ধতি হল arr1 এবং arr2-এর সর্বোচ্চ উপাদান বের করা, যতক্ষণ না উপাদানের সংখ্যা M বা N-এ পৌঁছায়। এবং তারপর সব মান যোগ করে যোগফল বের করা।
আরম্ভিকরণ:
maxSum = 0
ধাপ ১: i → 0 থেকে n
ধাপ ১.১: যদি arr1[i] > arr2[i] এবং M >= 0 হয় → maxSum += arr1[i]。
ধাপ ১.২: অন্যথায় যদি arr1[i] < arr2[i] এবং N >= 0 হয় → maxSum += arr2[i]。
ধাপ ১.৩: অন্যথায় বের হোন।
ধাপ ৩: maxSum ফেরত দিন।
#includeusing namespace std; int calcMaxSumFromArrays(int arr1[], int arr2[], int N, int M, int size1, int size2) { int maxSum = 0; for (int i = 0; i < size1; i++) { if (arr1[i] > arr2[i] && N > 0) { maxSum += arr1[i]; N--; } else if (arr1[i] <= arr2[i] && M > 0) { maxSum += arr2[i]; M--; } else if (M > 0) { maxSum += arr2[i]; M--; } else if (N > 0) { maxSum += arr1[i]; N--; } else return maxSum; } return maxSum; } int main() { int arr1[] = {5, 1, 6, 2, 8, 9}; int arr2[] = {8, 4, 7, 9, 1, 3}; int N = 3, M = 2; int size1 = sizeof(arr1) / sizeof(arr1[0]); int size2 = sizeof(arr2) / sizeof(arr2[0]); cout << "The maximum sum by picking elements from two arrays in order is " << calcMaxSumFromArrays(arr1, arr2, N, M, size1, size2); return 0; }
The maximum sum by picking elements from two arrays in order is 28