কম্পিউটার

C++ এ স্টিক সংযোগ করতে ন্যূনতম খরচ


ধরুন আমাদের কাছে ধনাত্মক পূর্ণসংখ্যা দৈর্ঘ্যের কিছু স্টিক আছে। X এবং Y দৈর্ঘ্যের যেকোন দুটি স্টিককে X + Y মূল্য দিয়ে একটি লাঠিতে সংযোগ করতে পারি। একটি লাঠি অবশিষ্ট না থাকা পর্যন্ত এটি করা হবে। আমাদের এইভাবে একটি লাঠিতে সমস্ত প্রদত্ত লাঠি সংযুক্ত করার ন্যূনতম খরচ খুঁজে বের করতে হবে। সুতরাং স্ট্যাক যদি [2,4,3] হয়, তাহলে আউটপুট হবে 14।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি সর্বাধিক হিপ অগ্রাধিকার সারি pq সংজ্ঞায়িত করুন
  • s-এর সমস্ত উপাদান pq-তে প্রবেশ করান
  • উত্তর :=0
  • যদিও pq এর একাধিক উপাদান আছে
    • temp :=সারির শীর্ষে, pq থেকে শীর্ষ মুছে দিন
    • temp :=temp + pq এর শীর্ষ উপাদান, এবং pq থেকে মুছে দিন
    • উত্তর :=ans + temp
    • pq-এ temp সন্নিবেশ করান
  • উত্তর ফেরত দিন

উদাহরণ(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++ এ একটি প্রদত্ত 2D অ্যারেতে ন্যূনতম যোগফল সাবম্যাট্রিক্স

  2. C++ এ প্রতিটি কার্টেসিয়ান স্থানাঙ্ক সংযোগ করার জন্য সর্বনিম্ন খরচ খুঁজে বের করার জন্য প্রোগ্রাম

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

  4. C++ এ কাজের সময়সূচীর ন্যূনতম অসুবিধা