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

C++ प्रोग्राम सेट किए गए अधिकतम रेटेड भागों का पता लगाने के लिए

मान लीजिए, एक निर्माता है जो किसी विशेष उत्पाद के लिए विशिष्ट भागों का निर्माण करता है। निर्माता के पास भागों के अलग-अलग रूप हैं, और भागों की तीन मानदंडों पर एक विशिष्ट रेटिंग है। एन उत्पादों की रेटिंग सरणी 'रेटिंग' में दी गई है जहां प्रत्येक तत्व प्रारूप (ए, बी, सी) का है जहां ए, बी, और सी उत्पाद के विभिन्न रेटिंग मानदंड हैं। अब, एक ओईएम प्रत्येक उत्पाद के लिए एम पुर्जे खरीदना चाहता है जो वे पुर्जों के निर्माता से बनाते हैं। OEM नीचे दी गई शर्तों को पूरा करने वाले भागों को चुनता है -

  • एक ही हिस्से की दो या दो से अधिक इकाइयाँ नहीं खरीदी जानी चाहिए।

  • भागों का समुच्चय इस प्रकार चुनें कि V का मान अधिकतम हो, जहाँ V =| मानदंड की कुल रेटिंग A| + |मापदंडों की कुल रेटिंग B| + |मापदंडों की कुल रेटिंग C|.

हमें OEM द्वारा चुने गए भागों से V का अधिकतम संभव मान ज्ञात करना होगा।

इसलिए, यदि इनपुट n =6, m =4, रेटिंग ={{2, 3, 5}, {3, 5, 2}, {4, 8, 5}, {1, 5, 3}, जैसा है। {7, 2, 7}, {4, 3, 6}}, तो आउटपुट 56 होगा।

यदि OEM भाग 1, 3, 5, और 6 चुनता है, तो प्रत्येक श्रेणी के लिए कुल रेटिंग हैं -

Category A = 2 + 4 + 7 + 4 = 17
Category B = 3 + 8 + 2 + 3 = 16.
Category C = 5 + 5 + 7 + 6 = 23
The total value of V is 17 + 16 + 23 = 56.

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

N := 100
Define an array arr of size: 9 x N.
Define an array ans.
for initialize i := 0, when i < n, update (increase i by 1), do:
   a := first value of ratings[i]
   b := second value of ratings[i]
   c := third value of ratings[i]
   arr[1, i] := a + b + c
   arr[2, i] := a - b - c
   arr[3, i] := a + b - c
   arr[4, i] := a - b + c
   arr[5, i] := -a + b + c
   arr[6, i] := -a - b - c
   arr[7, i] := -a + b - c
   arr[8, i] := -a - b + c
for initialize i := 1, when i <= 8, update (increase i by 1), do:
   sort the array arr[i]
for initialize i := 1, when i <= 8, update (increase i by 1), do:
   reverse the array arr[i]
if m is the same as 0, then:
   V := 0
Otherwise
   for initialize j := 1, when j <= 8, update (increase j by 1), do:
      k := 0
      for initialize i := 0, when i < m, update (increase i by 1), do:
         k := k + arr[j, i]
         V := maximum of V and k
return V

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int modval = (int) 1e9 + 7;
#define N 100
int solve(int n, int m, vector<tuple<int, int, int>> ratings) {
   int V, arr[9][N] ;
   vector<int> ans ;
   for(int i = 0 ; i < n ; i++) {
      int a, b, c;
      tie(a, b, c) = ratings[i];
      arr[1][i] = a + b + c ;
      arr[2][i] = a - b - c ;
      arr[3][i] = a + b - c ;
      arr[4][i] = a - b + c ;
      arr[5][i] = -a + b + c ;
      arr[6][i] = -a - b - c ;
      arr[7][i] = -a + b - c ;
      arr[8][i] = -a - b + c ;
   }
   for(int i = 1 ; i <= 8 ; i++)
    sort(arr[i] , arr[i] + n) ;
   for(int i = 1 ; i <= 8 ; i++)
    reverse(arr[i] , arr[i] + n) ;
   if (m == 0)
   V = 0 ;
   else {
      for (int j = 1; j <= 8; j++) {
         int k = 0;
         for (int i = 0; i < m; i++)
            k += arr[j][i];
         V = max(V, k);
      }
   }
   return V;
}
int main() {
   int n = 6, m = 4;
   vector<tuple<int, int, int>> ratings = {{2, 3, 5}, {3, 5, 2}, {4, 8, 5}, {1, 5, 3}, {7, 2, 7}, {4, 3, 6}};
   cout<< solve(n, m, ratings);
   return 0;
}

इनपुट

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

आउटपुट

56

  1. C++ में त्रिभुज के केंद्रक को खोजने का कार्यक्रम

    इस समस्या में, हमें एक 2D सरणी दी गई है जो त्रिभुज के तीन शीर्षों के निर्देशांकों को दर्शाती है। हमारा काम C++ में त्रिभुज के Centroid को खोजने के लिए एक प्रोग्राम बनाना है। सेंट्रोइड त्रिभुज का वह बिंदु है जिस पर त्रिभुज की तीन माध्यिकाएं प्रतिच्छेद करती हैं। माध्यिका त्रिभुज की वह रेखा है जो त्र

  1. C++ में समांतर चतुर्भुज का क्षेत्रफल ज्ञात करने का कार्यक्रम

    इस समस्या में, हमें दो मान दिए गए हैं जो समांतर चतुर्भुज के आधार और ऊंचाई को दर्शाते हैं। हमारा कार्य C++ में समांतर चतुर्भुज का क्षेत्रफल ज्ञात करने के लिए एक प्रोग्राम बनाना है। समांतर चतुर्भुज एक चार भुजा बंद आकृति है जिसकी विपरीत भुजाएँ एक दूसरे के समान और समानांतर हैं। समस्या को समझने के लि

  1. C++ में एक पेड़ की अधिकतम गहराई या ऊँचाई ज्ञात करने के लिए एक प्रोग्राम लिखें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम किसी दिए गए पेड़ की अधिकतम गहराई या ऊंचाई का पता लगाने के लिए एक प्रोग्राम लिखना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, पेड़ की ऊंचाई 3 होती है। एक पेड़ की अधिकतम ऊँचाई ज्ञात करने के लिए, हम उसके बाएँ और दाएँ उपप्रकार की ऊँचाई