সর্বোচ্চ যোগফলযুক্ত ক্রমবর্ধমান সাবসিকোয়েন্স হল পূর্ণসংখ্যাগুলোর একটি প্রদত্ত তালিকার সাবসিকোয়েন্স, যার যোগফল সর্বোচ্চ এবং সাবসিকোয়েন্সের সব উপাদান ক্রমবর্ধমান ক্রমে সাজানো থাকে।
ধরি এমন একটি অ্যারে আছে যা সর্বোচ্চ যোগফলযুক্ত ক্রমবর্ধমান সাবসিকোয়েন্স সংরক্ষণ করবে, بحيث L[i] হল array[i]-তে শেষ হওয়া সর্বোচ্চ যোগফলযুক্ত ক্রমবর্ধমান সাবসিকোয়েন্স।
ইনপুট এবং আউটপুট
ইনপুট: পূর্ণসংখ্যাগুলোর সিকোয়েন্স।
{3, 2, 6, 4, 5, 1}
আউটপুট: সর্বোচ্চ যোগফলযুক্ত ক্রমবর্ধমান সাবসিকোয়েন্স।
{3, 4, 5}
অ্যালগরিদম
maxSumSubSeq(array, n)
ইনপুট: সংখ্যাগুলোর সিকোয়েন্স, উপাদান সংখ্যা।
আউটপুট: ক্রমবর্ধমান সাবসিকোয়েন্সের সর্বোচ্চ যোগফল।
শুরু
subSeqLen নামক অ্যারে-অফ-অ্যারে সংজ্ঞায়িত করুন আকার n
arr[0] কে subSeqLen-এ যোগ করুন
i := 1 থেকে n-1 পর্যন্ত রেঞ্জে, করুন
j := 0 থেকে i-1 পর্যন্ত রেঞ্জে, করুন
যদি arr[i] > arr[j] এবং subSeqLen[i]-এর যোগফল < subSeqLen[j]-এর যোগফল হয়, তবে
subSeqLen[i] := subSeqLen[j]
শেষ
শেষ
arr[i] কে subSeqLen[i]-এ যোগ করুন
res := subSeqLen[0]
subSeqLen-এর সকল মান জন্য, করুন
যদি subSeqLen[i]-এর যোগফল > subSeqLen[res]-এর যোগফল হয়, তবে
res := subSeqLen[i]
শেষ
res-এর মানগুলো প্রিন্ট করুন
শেষ
উদাহরণ (C++)
#include <iostream> #include <vector> using namespace std; int findAllSum(vectorarr) { int sum = 0; for(int i = 0; i > subSeqLen(n); subSeqLen[0].push_back(arr[0]); for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if ((arr[i] > arr[j]) && (findAllSum(subSeqLen[i]) < findAllSum(subSeqLen[j]))) subSeqLen[i] = subSeqLen[j]; } subSeqLen[i].push_back(arr[i]); } vector res = subSeqLen[0]; for(int i = 0; i findAllSum(res)) res = subSeqLen[i]; } for(int i = 0; i আউটপুট
The Maximum Sum Subsequence is: 3 4 5