
假设有一个制造商为特定产品制造特定零件。制造商有n种不同的零件变体,这些零件在三个标准上有特定的评级。n个产品的评级在数组'ratings'中给出,其中每个元素的格式为(A, B, C),其中A、B和C是产品的不同评级标准。现在,一个OEM想要从零件制造商那里购买每种产品所需的m个零件。OEM选择满足以下条件的零件:
不能购买两个或更多相同的零件。
选择一组零件,使值V最大化,其中V = |标准A的总评级| + |标准B的总评级| + |标准C的总评级|。
我们需要找到OEM选择的零件中V的最大可能值。
立即学习“C++免费学习笔记(深入)”;
所以,如果输入是n = 6,m = 4,ratings = {{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
以上就是C++ 程序以找出最大评级零件集合的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号