কম্পিউটার টিউটোরিয়াল

ডাইনামিক প্রোগ্রামিং ব্যবহার করে সর্বোচ্চ যোগফল বাড়মান সাবসিকোয়েন্স (C++ প্রোগ্রাম)

এই সমস্যাতে, আমাদের n আকারের একটি অ্যারে arr[] দেওয়া আছে। আমাদের কাজ হল ডাইনামিক প্রোগ্রামিং ব্যবহার করে সর্বোচ্চ যোগফল বাড়মান সাবসিকোয়েন্স খুঁজে বের করার C++ প্রোগ্রাম তৈরি করা।

সমস্যা বর্ণনা

সর্বোচ্চ যোগফল বাড়মান সাবসিকোয়েন্স খুঁজে বের করার জন্য, আমরা একটি সাবসিকোয়েন্স তৈরি করব যেখানে পরবর্তী উপাদান বর্তমান উপাদানের চেয়ে বড় হবে।

উদাহরণ ইনপুট
arr[] = {4, 2, 3, 6, 5, 9}
আউটপুট
20
ব্যাখ্যা
সর্বোচ্চ যোগফল বাড়মান সাবসিকোয়েন্স: {2, 3, 6, 9} = 2 + 3 + 6 + 9 = 20
সমাধানের পদ্ধতি

ডাইনামিক প্রোগ্রামিং পদ্ধতি ব্যবহার করে সমস্যা সমাধান করতে হবে। আমরা বর্তমান উপাদান পর্যন্ত সর্বোচ্চ যোগফল সংরক্ষণ করার জন্য একটি অ্যারে তৈরি করব। তারপর অ্যারেতে থেকে সর্বোচ্চ যোগফল ফেরত দিব।

C++ প্রোগ্রাম উদাহরণ
#include 
using namespace std;

int retMaxVal(int x, int y) {
    if (x > y)
        return x;
    return y;
}

int calcMaxSubSeqSum(int arr[], int n) {
    int maxSum = 0;
    int sumDP[n];
    
    for (int i = 0; i < n; i++)
        sumDP[i] = arr[i];
    
    for (int i = 1; i < n; i++)
        for (int j = 0; j < i; j++)
            if ((sumDP[i] < (sumDP[j] + arr[i])) && (arr[i] > arr[j]))
                sumDP[i] = sumDP[j] + arr[i];
    
    for (int i = 0; i < n; i++)
        maxSum = retMaxVal(sumDP[i], maxSum);
    
    return maxSum;
}

int main() {
    int arr[] = {4, 2, 3, 6, 5, 9};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "The maximum Sum Increasing Subsequence using DP is " << calcMaxSubSeqSum(arr, n);
    return 0;
}
আউটপুট
Sum of maximum sum increasing subsequence is 20
  1. স্ট্রিক্টলি ইনক্রিজিং সাব-অ্যারের সর্বোচ্চ যোগফল বের করা C++-তে

  2. C++ ব্যবহার করে ম্যাট্রিক্সে সর্বোচ্চ যোগফল করা কলাম বের করা

  3. C++-এ ডিভাইড অ্যান্ড কঙ্কর ব্যবহার করে मैक्सিমাম সাবঅ্যারে সম বের করা

  4. C++-এ বাইনারি সার্চ পদ্ধতিতে সর্বোচ্চ সাবঅ্যারে যোগফল (Maximum Subarray Sum)