Heim > Backend-Entwicklung > C++ > C++-Programm zum Ermitteln des maximalen Satzes bewerteter Teile

C++-Programm zum Ermitteln des maximalen Satzes bewerteter Teile

王林
Freigeben: 2023-09-06 10:33:08
nach vorne
949 Leute haben es durchsucht

C++ 程序以找出最大评级零件集合

Angenommen, es gibt einen Hersteller, der ein bestimmtes Teil für ein bestimmtes Produkt herstellt. Hersteller bieten n verschiedene Variationen von Teilen an, die spezifische Bewertungen für drei Standards haben. Die Bewertungen von n Produkten werden im Array „Bewertungen“ angegeben, wobei jedes Element das Format (A, B, C) hat, wobei A, B und C unterschiedliche Bewertungskriterien für das Produkt sind. Nun möchte ein OEM die für jedes Produkt benötigten m Teile von einem Teilehersteller kaufen. Der OEM wählt Teile aus, die die folgenden Bedingungen erfüllen:

  • Der Kauf von zwei oder mehr identischen Teilen ist nicht möglich.

  • Wählen Sie einen Teilesatz aus, der den Wert V maximiert, wobei V = |Gesamtbewertung von Standard A| + |Gesamtbewertung von Standard B|.

Wir müssen den maximal möglichen Wert von V in den vom OEM ausgewählten Teilen finden.

Wenn also die Eingabe n = 6, m = 4, Bewertungen = {{2, 3, 5}, {3, 5, 2}, {4, 8, 5}, {1, 5, 3} ist , {7, 2, 7}, {4, 3, 6}}, dann ist die Ausgabe 56.

Wenn der OEM die Teile 1, 3, 5 und 6 auswählt, lautet die Gesamtbewertung für jede Kategorie:

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.
Nach dem Login kopieren

Um dieses Problem zu lösen, führen wir die folgenden Schritte aus:

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
Nach dem Login kopieren

Beispiel

Sehen wir uns die Implementierung unten an Zum besseren Verständnis −

#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;
}
Nach dem Login kopieren

Eingabe

6, 4, {{2, 3, 5}, {3, 5, 2}, {4, 8, 5}, {1, 5, 3}, {7, 2, 7}, {4, 3,6}}
Nach dem Login kopieren

Ausgabe

56
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonC++-Programm zum Ermitteln des maximalen Satzes bewerteter Teile. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage