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

C++ में एक टीम का अधिकतम प्रदर्शन


मान लीजिए कि n इंजीनियर हैं। वे 1 से n तक गिने जाते हैं और हमारे पास दो सरणियाँ भी हैं:गति और दक्षता, यहाँ गति [i] और दक्षता [i] ith इंजीनियर के लिए गति और दक्षता का प्रतिनिधित्व करती है। हमें अधिकतम k इंजीनियरों से बनी टीम का अधिकतम प्रदर्शन खोजना होगा। उत्तर बहुत बड़ा हो सकता है इसलिए इसे मॉड्यूलो 10^9 + 7 लौटाएं।

यहां एक टीम का प्रदर्शन उनके इंजीनियरों की गति को उनके इंजीनियरों की न्यूनतम दक्षता से गुणा करने का योग है।

इसलिए, यदि इनपुट n =6, गति =[1,5,8,2,10,3], दक्षता =[9,7,2,5,4,3], k =2 जैसा है, तो आउटपुट 60 होगा, क्योंकि हमारे पास गति 10 और दक्षता 4 के साथ इंजीनियर और गति 5 और दक्षता 7 के साथ इंजीनियर का चयन करके टीम का अधिकतम प्रदर्शन है। यानी प्रदर्शन =(10 + 5) * मिनट (4, 7) =60 ।

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

  • रिट:=0

  • एक 2डी सरणी को परिभाषित करें v

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • v के अंत में {e[i], s[i] } डालें

  • सरणी v को उल्टे क्रम में क्रमबद्ध करें

  • एक प्राथमिकता कतार pq परिभाषित करें

  • योग :=0

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • यदि pq का आकार k के समान है, तो -

      • योग :=योग का शीर्ष तत्व - pq

      • pq से तत्व हटाएं

    • योग :=योग + वी[i, 1]

    • pq में v[i, 1] डालें

    • रिट :=अधिकतम रिट और योग * v[i, 0]

  • रिटर्न रिट मोड (1^9 + 7)

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maxPerformance(int n, vector<int>& s, vector<int>& e, int k){
      long long int ret = 0;
      vector<vector<int> > v;
      for (int i = 0; i < n; i++) {
         v.push_back({ e[i], s[i] });
      }
      sort(v.rbegin(), v.rend());
      priority_queue<int, vector<int>, greater<int> > pq;
      long long int sum = 0;
      for (int i = 0; i < n; i++) {
         if (pq.size() == k) {
            sum -= pq.top();
            pq.pop();
         }
         sum += v[i][1];
         pq.push(v[i][1]);
         ret = max(ret, sum * v[i][0]);
      }
      return ret % (long long int)(1e9 + 7);
   }
};
main(){
   Solution ob;
   vector<int> v = {1,5,8,2,10,3};
   vector<int> v1 = {9,7,2,5,4,3};
   cout << (ob.maxPerformance(6,v,v1,2));
}

इनपुट

6, {1,5,8,2,10,3}, {9,7,2,5,4,3}, 2

आउटपुट

60

  1. C++ में जॉब शेड्यूलिंग में अधिकतम लाभ

    मान लीजिए कि हमारे पास अलग-अलग कार्य हैं, जहां प्रत्येक कार्य प्रारंभ समय [i] से समाप्ति समय [i] तक किया जाना निर्धारित है, उस कार्य के लिए हमें लाभ का लाभ मिलता है [i]। हम स्टार्टटाइम, एंडटाइम और प्रॉफिट लिस्ट को जानते हैं, हमें अधिकतम लाभ का पता लगाना होगा जो हम इस तरह ले सकते हैं कि ओवरलैपिंग टाइ

  1. सी ++ में न्यूनतम ढेर में अधिकतम तत्व

    समस्या कथन न्यूनतम ढेर को देखते हुए उसमें अधिकतम तत्व खोजें। उदाहरण यदि इनपुट हीप है - तब अधिकतम तत्व 55 . है एल्गोरिदम न्यूनतम हीप में पैरेंट नोड अपने बच्चों से छोटा होगा। इसलिए हम यह निष्कर्ष निकाल सकते हैं कि एक गैर-पत्ती नोड अधिकतम नहीं हो सकता। लीफ नोड्स में अधिकतम तत्व खोजें उदाहरण आइए

  1. C++ में जोड़े की अधिकतम लंबाई श्रृंखला

    जोड़े की एक श्रृंखला दी गई है। प्रत्येक जोड़ी में दो पूर्णांक होते हैं और पहला पूर्णांक हमेशा छोटा होता है, और दूसरा बड़ा होता है, वही नियम श्रृंखला निर्माण के लिए भी लागू किया जा सकता है। एक जोड़ी (x, y) को एक जोड़ी (p, q) के बाद जोड़ा जा सकता है, केवल अगर q