কম্পিউটার

C++ এ বিপরীত পোলিশ স্বরলিপি মূল্যায়ন করুন


ধরুন আমাদের একটি ত্রিভুজ আছে। আমাদের উপরের থেকে নীচের সর্বনিম্ন পথের যোগফল খুঁজে বের করতে হবে। প্রতিটি ধাপে আমরা নিচের সারির সন্নিহিত সংখ্যায় যেতে পারি।

উদাহরণস্বরূপ, যদি নিচের ত্রিভুজটি

এর মত হয়
[
   [2],
   [3,4],
   [6,5,7],
   [4,1,8,3]
]

উপর থেকে নীচের সর্বনিম্ন পথের যোগফল হল 11 (2 + 3 + 5 + 1 =11)।

আসুন ধাপগুলো দেখি

  • ডাইনামিক প্রোগ্রামিং পদ্ধতিতে ব্যবহার করার জন্য একটি টেবিল তৈরি করুন।
  • n :=ত্রিভুজের আকার
  • এর জন্য i :=n – 2 নিচে 0
    • j :=0 থেকে i
        এর জন্য
      • dp[j] :=ত্রিভুজ[i, j] + ন্যূনতম dp[j] এবং dp[j + 1]
  • রিটার্ন ডিপি[0]

আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি

উদাহরণ

class Solution {
   public:
   void printVector(vector <int>& v){
   for(int i = 0; i < v.size(); i++)cout << v[i] << " ";
   cout << endl;
}
int minimumTotal(vector<vector<int>>& triangle) {
   vector <int> dp(triangle.back());
   int n = triangle.size();
   for(int i = n - 2; i >= 0; i--){
      for(int j = 0; j <= i; j++){
         dp[j] = triangle[i][j] + min(dp[j], dp[j + 1]);
      }
      // printVector(dp);
   }
   return dp[0];
   }
};

ইনপুট

[[2],[3,4],[6,5,7],[4,1,8,3]]

আউটপুট

11

  1. C++ এ রেখার প্রতিফলন

  2. C++ এ একটি অ্যারে বিপরীত করুন

  3. C++ এ স্ট্যাক ব্যবহার করে একটি লিঙ্ক তালিকা উল্টান

  4. C++ এ static_cast