Rumah > pembangunan bahagian belakang > C++ > Program C++ untuk mencari set maksimum bahagian yang dinilai

Program C++ untuk mencari set maksimum bahagian yang dinilai

王林
Lepaskan: 2023-09-06 10:33:08
ke hadapan
995 orang telah melayarinya

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

Andaikan ada pengeluar yang membuat bahagian tertentu untuk produk tertentu. Pengilang mempunyai n variasi bahagian yang berbeza yang mempunyai penarafan khusus pada tiga standard. Penarafan n produk diberikan dalam 'penilaian' tatasusunan, di mana setiap elemen adalah dalam format (A, B, C), di mana A, B dan C ialah kriteria penilaian yang berbeza untuk produk. Kini, OEM ingin membeli m bahagian yang diperlukan untuk setiap produk daripada pengeluar alat ganti. OEM memilih bahagian yang memenuhi syarat berikut:

  • Tidak boleh membeli dua atau lebih bahagian yang sama.

  • Pilih set bahagian yang memaksimumkan nilai V, dengan V = |jumlah penilaian standard A| + |jumlah penilaian standard B|.

Kita perlu mencari nilai maksimum yang mungkin bagi V di bahagian yang dipilih oleh OEM.

Jadi, jika input ialah n = 6, m = 4, rating = {{2, 3, 5}, {3, 5, 2}, {4, 8, 5}, {1, 5, 3} , {7, 2, 7}, {4, 3, 6}}, maka outputnya ialah 56.

Jika OEM memilih bahagian 1, 3, 5 dan 6, maka jumlah rating bagi setiap kategori ialah:

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.
Salin selepas log masuk

Untuk menyelesaikan masalah ini, kami akan mengikuti langkah berikut:

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
Salin selepas log masuk

Contoh

Mari lihat pelaksanaan di bawah Untuk lebih memahami −

#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;
}
Salin selepas log masuk

input

6, 4, {{2, 3, 5}, {3, 5, 2}, {4, 8, 5}, {1, 5, 3}, {7, 2, 7}, {4, 3,6}}
Salin selepas log masuk

output

56
Salin selepas log masuk

Atas ialah kandungan terperinci Program C++ untuk mencari set maksimum bahagian yang dinilai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan