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

C++-এ রাইট নাম্বার ট্রায়্যাঙ্গেলে ম্যাক্সিমাম সাম পাথ


সমস্যা বিবরণ

একটি রাইট ট্রায়্যাঙ্গেল নম্বর দিয়ে দেওয়া আছে। টপ থেকে বেস পর্যন্ত যেসব পাথ আছে (প্রতিটি স্টেপে নিচে বা ডানে-নিচে যেতে পারব), তাদের মধ্যে ম্যাক্সিমাম সাম বের করতে হবে।

উদাহরণ

ইনপুট:
3
4 5
1 10 7
ম্যাক্সিমাম সাম = 18 (3 + 5 + 10)

অ্যালগরিদম

লাস্ট রোয়ের প্রতিটি সেলে এন্ডিং ম্যাক্সিমাম সাম বের করে তার মধ্যে ম্যাক্সিমাম নিব। DP ব্যবহার করে ওভারল্যাপিং সাবপ্রব্লেম সমাধান।

উদাহরণ

#include<bits/stdc++.h>
using namespace std;

int maxSum(int tringle[][3], int n){
    if (n > 1) {
        tringle[1][1] = tringle[1][1] + tringle[0][0];
        tringle[1][0] = tringle[1][0] + tringle[0][0];
    }
    for(int i = 2; i < n; i++) {
        tringle[i][0] = tringle[i][0] + tringle[i-1][0];
        tringle[i][i] = tringle[i][i] + tringle[i-1][i-1];
        for (int j = 1; j < i; j++){
            if (tringle[i][j] + tringle[i-1][j-1] >= tringle[i][j] + tringle[i-1][j]) {
                tringle[i][j] = tringle[i][j] + tringle[i-1][j-1];
            } else {
                tringle[i][j] = tringle[i][j] + tringle[i-1][j];
            }
        }
    }
    int max = tringle[n - 1][0];
    for(int i = 1; i < n; i++) {
        if(max < tringle[n-1][i])
            max = tringle[n-1][i];
    }
    return max;
}

int main(){
    int tringle[3][3] = {
        {3},
        {4,5},
        {1,10,7}
    };
    cout << "Maximum sum = " << maxSum(tringle, 3) << endl;
    return 0;
}

আউটপুট

Maximum sum = 18

  1. C++ দিয়ে সর্বোচ্চ বেণ্ড (Bends) Barney পথের দৈর্ঘ্য বের করা

  2. C++-এ কণকোণী সমদ্বিবাহু ত্রিভুজে ফিট হতে পারা ম্যাক্সিমাম বর্গের সংখ্যা

  3. C++-এ বাইনারি ট্রিতে সর্বোচ্চ পথ যোগফল

  4. ত্রিভুজে ন্যূনতম সম পথ বের করা (C++)