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

C++-এ আডজেসেন্ট উপাদান ছাড়া সর্বোচ্চ যোগফল (ডাইনামিক প্রোগ্রামিং - সেট ২)

একটি অ্যারে দেওয়া আছে। এমন সাবসিকোয়েন্স বের করতে হবে যাতে কোনো দুটি উপাদান আডজেসেন্ট না হয় এবং তাদের যোগফল সর্বোচ্চ হয়। ডাইনামিক প্রোগ্রামিং পদ্ধতি।

উদাহরণ

arr[] = {5, 1, 3, 7, 9, 2, 5}

আউটপুট: 22

ব্যাখ্যা: ইন্ডেক্স ০,২,৪,৬: 5+3+9+5 = 22।

DP রিলেশন

DP[i] = max( DP[i+1], arr[i] + DP[i+2] )

মেমোইজেশন দিয়ে টপ-ডাউন বা বটম-আপ করা যায়।

C++ প্রোগ্রাম (মেমোইজেশন)

#include <iostream>
using namespace std;

int DP[100];
bool visited[100];

int maxVal(int a, int b) { return (a > b) ? a : b; }

int calcMaxSumWOAdj(int arr[], int i, int n) {
    if (i >= n) return 0;
    if (visited[i]) return DP[i];
    visited[i] = true;
    DP[i] = maxVal(calcMaxSumWOAdj(arr, i+1, n), arr[i] + calcMaxSumWOAdj(arr, i+2, n));
    return DP[i];
}

int main() {
    int arr[] = {5, 1, 3, 7, 9, 2, 5};
    int n = sizeof(arr)/sizeof(int);
    cout << "Max sum without adjacent: " << calcMaxSumWOAdj(arr, 0, n);
    return 0;
}

আউটপুট: Max sum without adjacent: 22

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

  2. C++-এ সার্কুলার অ্যারেতে আঁচবিক উপাদান ছাড়া সর্বোচ্চ যোগফল বের করার পদ্ধতি

  3. C++-এ সন্নিহিত উপাদান বাদে অ্যারেতে সর্বোচ্চ সেট বিট যোগফল (Maximum set bit sum in array without considering adjacent elements)

  4. C++-এ দুটি অ্যারেতে ম্যাক্সিমাম সাম পাথ (Maximum Sum Path in Two Arrays)