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

C++ में अधिकतम K युग्मों को चुनने वाले युग्मों की एक सरणी की अधिकतम लागत ज्ञात कीजिए

मान लीजिए कि हमारे पास जोड़े ए की एक सरणी है; हमें अधिकतम K युग्मों के चयन के लिए अधिकतम लागत ज्ञात करनी होगी। इस मामले में, जोड़े प्रकार के तत्वों की एक सरणी की लागत चयनित जोड़ी के पहले तत्वों के योग का उत्पाद है और चयनित जोड़े के दूसरे तत्वों में सबसे छोटा है। उदाहरण के तौर पर, यदि इन जोड़ियों को (4, 8), (10, 3) और (3, 6) चुना जाता है, तो K=3 के लिए लागत (4+10+3)*(3) =51 होगी।

इसलिए, यदि इनपुट ए =[(15, 5), (65, 25), (35, 20), (20, 5), (35, 20), (15, 18), (3, 8) जैसा है। ), (12, 17)], K =4, तो आउटपुट 2700 होगा

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

  • रेस :=0, योग =0

  • N:=A का आकार

  • my_set नामक जोड़े के एक सेट को परिभाषित करें

  • प्रत्येक जोड़ी के दूसरे मान के आधार पर सरणी A को क्रमबद्ध करें

  • इनिशियलाइज़ करने के लिए मैं :=N-1, जब i>=0, अपडेट (i से 1 घटाएँ), करें -

    • एक जोड़ी बनाएं (ए [i], i का पहला तत्व) और my_set में डालें

    • योग:=योग + ए का पहला तत्व [i]

    • जबकि my_set> K का आकार, करें −

      • यह:=my_set का पहला तत्व

      • योग :=योग - इसमें से पहला

      • इसे my_set से हटाएं

    • रेस :=अधिकतम रेस और योग * ए का दूसरा [i]

  • रिटर्न रेस

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
bool compactor(const pair<int, int>& a,const pair<int, int>& b) {
   return (a.second < b.second);
}
int get_maximum_cost(vector<pair<int, int> > &A, int K){
   int res = 0, sum = 0;
   int N = A.size();
   set<pair<int, int>> my_set;
   sort(A.begin(), A.end(), compactor);
   for (int i = N - 1; i >= 0; --i) {
      my_set.insert(make_pair(A[i].first, i));
      sum += A[i].first;
      while (my_set.size() > K) {
         auto it = my_set.begin();
         sum -= it->first;
         my_set.erase(it);
      }
      res = max(res, sum * A[i].second);
   }
   return res;
}
int main() {
   vector<pair<int, int> > arr = {{ 15, 5}, { 65, 25}, { 35, 20}, { 20, 5}, { 35, 20}, { 15, 18}, { 3, 8 }, {12, 17}};
   int K = 4;
   cout << get_maximum_cost(arr, K);
}

इनपुट

{{15, 5},{65, 25}, { 35, 20}, { 20, 5}, { 35, 20}, { 15, 18}, { 3, 8
}, {12, 17}}, 4

आउटपुट

2700

  1. C++ का उपयोग करके किसी सरणी में किसी संख्या की आवृत्ति ज्ञात करें।

    मान लीजिए कि हमारे पास एक सरणी है। एन विभिन्न तत्व हैं। हमें सरणी में एक तत्व की आवृत्ति की जांच करनी है। मान लीजिए A =[5, 12, 26, 5, 3, 4, 15, 5, 8, 4], अगर हम 5 की बारंबारता ज्ञात करने की कोशिश करते हैं, तो यह 3 होगा। इसे हल करने के लिए, हम सरणी को बाईं ओर से स्कैन करेंगे, यदि तत्व दिए गए नंबर के

  1. सी++ में एक सरणी में अधिकतम जीसीडी के साथ जोड़ी खोजें

    मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की एक सरणी है। हमारा काम सरणी से पूर्णांकों की जोड़ी को खोजना है, जहां GCD मान अधिकतम है। मान लीजिए A ={1, 2, 3, 4, 5}, तो आउटपुट 2 है। जोड़ी (2, 4) में GCD 2 है, अन्य GCD मान 2 से कम हैं। इस समस्या को हल करने के लिए, हम प्रत्येक तत्व के भाजक की गिनती को

  1. सी ++ प्रोग्राम एक ग्राफ में अधिकतम कट खोजने के लिए

    इस प्रोग्राम में ग्राफ में अधिकतम कट खोजने के लिए, हमें ग्राफ की एज कनेक्टिविटी को खोजने की जरूरत है। ग्राफ़ के ग्राफ़ की एक एज कनेक्टिविटी का अर्थ है कि यह एक पुल है, इसे हटाने से ग्राफ़ डिस्कनेक्ट हो जाएगा। डिस्कनेक्ट किए गए अप्रत्यक्ष ग्राफ़ में पुल को हटाने के साथ जुड़े घटकों की संख्या बढ़ जाती