এই সমস্যায়, আমাদের n পূর্ণসংখ্যাগুলির একটি অ্যারে অ্যারে দেওয়া হয়েছে। আমাদের কাজ হল অ্যারের প্রথম উপাদান থেকে শুরু করে সর্বাধিক যোগফলের পর্যায়ক্রমিক অনুক্রম খুঁজে বের করার জন্য একটি প্রোগ্রাম তৈরি করা৷
একটি পর্যায়ক্রমিক অনুবর্তন হল এমন একটি অনুবর্তন যেখানে উপাদানগুলি একটি বিকল্প ক্রমে বাড়তে থাকে এবং হ্রাস পায় যেমন প্রথমে হ্রাস পায়, তারপরে বৃদ্ধি পায়, তারপরে হ্রাস পায়। এখানে, সর্বোচ্চ যোগফল বের করার জন্য বিপরীত পর্যায়ক্রমিক অনুক্রমটি বৈধ নয়।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট
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 নেমস্পেস ব্যবহার করে std;int maxVal(int x, int y){ if(x> y) রিটার্ন x; রিটার্ন y;}int calcMaxSumAltSubSeq(int arr[], int n) { int maxSum =−10000; int maxSumDec[n]; bool isInc =মিথ্যা; memset(maxSumDec, 0, sizeof(maxSumDec)); int maxSumInc[n]; memset(maxSumInc, 0, sizeof(maxSumInc)); maxSumDec[0] =maxSumInc[0] =arr[0]; (int i=1; i arr[i]) { maxSumDec[i] =maxVal(maxSumDec[ i], maxSumInc[j]+arr[i]); isInc =true; } অন্যথায় যদি (arr[j] আউটপুট
সর্বোচ্চ যোগফল পর্যায়ক্রমে শুরু হচ্ছে ২৫