কম্পিউটার

C++ এ একটি ডান সংখ্যা ত্রিভুজে একটি পথের সর্বোচ্চ যোগফল


সমস্যা বিবৃতি

সংখ্যাগুলির একটি সমকোণী ত্রিভুজ দেওয়া হলে, উপরের থেকে শুরু করে বেসের দিকের পাথে প্রদর্শিত সংখ্যার যোগফলের বৃহত্তমটি খুঁজুন, যাতে প্রতিটি পথে পরবর্তী সংখ্যাটি সরাসরি নীচে বা নীচে-এবং-এক-স্থান-থেকে অবস্থিত -দ্যা-ডান

উদাহরণ

If given input is:
3
4 5
1 10 7
Then maximum sum is 18 as (3 + 5 + 10).

অ্যালগরিদম

ধারণাটি হল শেষ সারির প্রতিটি কক্ষে শেষ হওয়া বৃহত্তম যোগফল খুঁজে বের করা এবং এই যোগফলগুলির সর্বাধিক ফেরত দেওয়া৷

উপরের দুটি কক্ষ বিবেচনা করে আমরা পুনরাবৃত্তভাবে এই রাশিগুলি গণনা করতে পারি

যেহেতু ওভারল্যাপিং সাব-সমস্যা আছে, তাই শেষ সারির নির্দিষ্ট কক্ষে শেষ হওয়া সর্বাধিক যোগফল খুঁজে পেতে আমরা ডায়নামিক প্রোগ্রামিং ব্যবহার করি

উদাহরণ

#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++ পাথের দৈর্ঘ্য সর্বাধিক সংখ্যক বাঁক রয়েছে

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

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

  4. C++ এ একটি ত্রিভুজে ন্যূনতম সমষ্টি পথ