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

C++-এ স্টিক কানেক্ট করার ন্যূনতম খরচ


মনে করুন কিছু স্টিক আছে যাদের দৈর্ঘ্য ধনাত্মক পূর্ণসংখ্যা। আমরা যেকোনো দুটি স্টিক `X` এবং `Y` দৈর্ঘ্যের কানেক্ট করে একটি স্টিক বানাতে পারি `X + Y` খরচ দিয়ে। এটি তখন পর্যন্ত চলবে যতক্ষণ না একটি স্টিক বাকি থাকে। দেওয়া সব স্টিকগুলো এক করার ন্যূনতম খরচ বের করতে হবে। যদি স্টিক হয় `[2,4,3]`, তবে আউটপুট হবে ১৪।

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব -

  • এক্স ম্যাক্স হিপ প্রায়োরিটি কিউ `pq` সংজ্ঞায়িত করুন
  • `s`-এর সব এলিমেন্ট `pq`-তে ইনসার্ট করুন
  • `ans := 0`
  • যখন `pq`-তে একটির অধিক এলিমেন্ট থাকে
    • `temp := pq`-এর টপ, `pq`-থেকে টপ ডিলিট করুন
    • `temp := temp + pq`-এর টপ এলিমেন্ট, এবং `pq`-থেকে ডিলিট করুন
    • `ans := ans + temp`
    • `temp`-কে `pq`-তে ইনসার্ট করুন
  • `ans` রিটার্ন করুন

উদাহরণ (C++)

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন -

#include <bits/stdc++.h> using namespace std; class Solution { public:    int connectSticks(vector<int>& s) {       priority_queue <int, vector<int>, greater<int> > pq;       for(int i =0;i<s.size();i++)pq.push(s[i]);       int ans = 0;       while(pq.size()>1){          int temp = pq.top();          pq.pop();          temp += pq.top();          pq.pop();          ans+=temp;          pq.push(temp);       }       return ans;    } }; main(){    vector<int> v = {2,4,3};    Solution ob;    cout <<ob.connectSticks(v); }

ইনপুট

[2,4,3]

আউটপুট

14

  1. C++-এ একটি দেওয়া ২D অ্যারেতে ন্যূনতম যোগফল সাবম্যাট্রিক্স (Minimum Sum Submatrix)

  2. C++-এ কার্টেসিয়ান কোঅর্ডিনেট পয়েন্টগুলোর মিনিমাম কানেকশন খরচ বের করার প্রোগ্রাম

  3. C++-এ একটি বোর্ডকে বর্গাকারে কাটার ন্যূনতম খরচ

  4. C++-এ জব শিডিউলের ন্যূনতম কঠিনতা (Minimum Difficulty of a Job Schedule)