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
949 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!

sumber:tutorialspoint.com
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