Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में स्टिक्स को जोड़ने की न्यूनतम लागत


मान लीजिए कि हमारे पास धनात्मक पूर्णांक लंबाई वाली कुछ छड़ें हैं। हम X और Y लंबाई की किन्हीं भी दो छड़ियों को X + Y की लागत देकर एक छड़ी में जोड़ सकते हैं। यह तब तक किया जाएगा जब तक कि एक छड़ी शेष न हो। हमें इस प्रकार दी गई सभी छड़ियों को एक छड़ी में जोड़ने की न्यूनतम लागत ज्ञात करनी है। तो अगर स्टैक [2,4,3] है, तो आउटपुट 14 होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • अधिकतम हीप प्राथमिकता कतार pq परिभाषित करें
  • s के सभी तत्वों को pq में सम्मिलित करें
  • उत्तर:=0
  • जबकि pq में एक से अधिक तत्व हैं
    • अस्थायी:=कतार में सबसे ऊपर, pq से शीर्ष हटाएं
    • अस्थायी:=अस्थायी + pq का शीर्ष तत्व, और pq से हटाएं
    • उत्तर:=उत्तर + अस्थायी
    • pq में अस्थायी डालें
  • वापसी उत्तर

उदाहरण(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 कार्टेशियन निर्देशांक बिंदुओं (x, y) की एक सूची है। हम (x0, y0) और (x1, y1) को जोड़ सकते हैं, जिसकी लागत |x0 - x1| + |y0 - y1|। यदि हमें किसी भी संख्या में बिंदुओं को जोड़ने की अनुमति दी जाती है, तो हमें आवश्यक न्यूनतम लागत का पता लगाना होगा जैसे कि प्रत्येक बिंदु एक पथ से

  1. बोर्ड को C++ में वर्गों में काटने की न्यूनतम लागत

    अवधारणा मान लीजिए कि लंबाई p और चौड़ाई q का एक बोर्ड दिया गया है, हमें इस बोर्ड को p*q वर्गों में तोड़ने की आवश्यकता है ताकि तोड़ने की लागत कम से कम हो। इस बोर्ड के लिए हर किनारे के लिए कटिंग कॉस्ट दी जाएगी। संक्षेप में, हमें काटने के ऐसे क्रम का चयन करने की आवश्यकता है जिससे लागत कम से कम हो। उदाह

  1. C++ में जॉब शेड्यूल की न्यूनतम कठिनाई

    मान लीजिए कि हम d दिनों में कार्यों की एक सूची शेड्यूल करना चाहते हैं। कार्य निर्भर हैं इसलिए i-th कार्य पर काम करने के लिए, हमें सभी कार्यों को पूरा करना होगा जहां 0 <=j