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