এই সমস্যাতে, আমাদের n সংখ্যক পূর্ণসংখ্যা সহ একটি অ্যারে arr[] দেওয়া আছে। আমাদের কাজ হল অ্যারেটির প্রথম উপাদান থেকে শুরু করে সর্বোচ্চ যোগফল বारी-बারি সাবসিকোয়েন্স খুঁজে বের করার প্রোগ্রাম তৈরি করা।
একটি বاري-बারি সাবসিকোয়েন্স হল এমন একটি সাবসিকোয়েন্স যেখানে উপাদানগুলো বাড়ছে এবং কমছে বारी-बারি করে, অর্থাৎ প্রথম কমবে, তারপর বাড়বে, তারপর আবার কমবে। এখানে, বিপরীত বاري-बারি সাবসিকোয়েন্স সর্বোচ্চ যোগফল বের করার জন্য বৈধ নয়।
arr[] = {5, 1, 6, 2, 4, 8, 9}
27
শুরুর উপাদান: 5, কমে: 1, বাড়ে: 6, কমে: 2, বাড়ে: 4, N.A. এখানে, আমরা 4, 8, 9 কে সাবসিকোয়েন্সের শেষ উপাদান হিসেবে ব্যবহার করতে পারি। যোগফল = 5 + 1 + 6 + 2 + 4 + 9 = 27
সমস্যা সমাধানের জন্য, আমরা ডাইনামিক প্রোগ্রামিং পদ্ধতি ব্যবহার করব। এর জন্য, আমরা দুটি অ্যারে ব্যবহার করব - একটি arr[i] দিয়ে শেষ হওয়া উপাদানগুলোর সর্বোচ্চ যোগফল সংরক্ষণ করতে, যেখানে arr[i] বাড়ছে। অন্যটি arr[i] দিয়ে শেষ হওয়া উপাদানগুলোর সর্বোচ্চ যোগফল সংরক্ষণ করতে, যেখানে arr[i] কমছে।
তারপর আমরা এক-এক করে উপাদান যোগ করব বারি-बারি সাবসিকোয়েন্স কিনা চেক করে। প্রতিটি অ্যারেতে, আমরা ইনডেক্স পর্যন্ত সর্বোচ্চ যোগফল হিসাব করব। এবং n সংখ্যক উপাদান ট্রভার্স করার পর সর্বোচ্চ মান ফেরত দিব।
#include#include using namespace std; int maxVal(int x, int y) { if (x > y) return x; return y; } int calcMaxSumAltSubSeq(int arr[], int n) { int maxSum = -10000; int maxSumDec[n]; bool isInc = false; memset(maxSumDec, 0, sizeof(maxSumDec)); int maxSumInc[n]; memset(maxSumInc, 0, sizeof(maxSumInc)); maxSumDec[0] = maxSumInc[0] = arr[0]; for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (arr[j] > arr[i]) { maxSumDec[i] = maxVal(maxSumDec[i], maxSumInc[j] + arr[i]); isInc = true; } else if (arr[j] < arr[i] && isInc) maxSumInc[i] = maxVal(maxSumInc[i], maxSumDec[j] + arr[i]); } } for (int i = 0; i < n; i++) maxSum = maxVal(maxSum, maxVal(maxSumInc[i], maxSumDec[i])); return maxSum; } int main() { int arr[] = {8, 2, 3, 5, 7, 9, 10}; int n = sizeof(arr) / sizeof(arr[0]); cout << "The maximum sum alternating subsequence starting is " << calcMaxSumAltSubSeq(arr, n); return 0; }
The maximum sum alternating subsequence starting is 25