สมมติว่ามีผู้ผลิตที่ผลิตชิ้นส่วนเฉพาะสำหรับผลิตภัณฑ์เฉพาะ ผู้ผลิตมีชิ้นส่วนที่แตกต่างกัน n แบบ และชิ้นส่วนมีการจัดอันดับเฉพาะตามเกณฑ์สามประการ การให้คะแนนของผลิตภัณฑ์ n รายการจะได้รับใน 'การให้คะแนน' ของอาร์เรย์ โดยที่แต่ละองค์ประกอบอยู่ในรูปแบบ (A, B, C) โดยที่ A, B และ C เป็นเกณฑ์การให้คะแนนที่แตกต่างกันของผลิตภัณฑ์ ตอนนี้ OEM ต้องการซื้อชิ้นส่วน m สำหรับแต่ละผลิตภัณฑ์ที่พวกเขาผลิตจากผู้ผลิตชิ้นส่วน OEM จะเลือกชิ้นส่วนที่ตรงตามเงื่อนไขด้านล่าง -
-
ไม่ควรซื้อชิ้นส่วนเดียวกันตั้งแต่ 2 ชิ้นขึ้นไป
-
เลือกชุดของชิ้นส่วนที่ต้องการให้ค่า V ขยายใหญ่สุด โดยที่ V =|คะแนนรวมของเกณฑ์ A| + |คะแนนรวมของเกณฑ์ B| + |คะแนนรวมของเกณฑ์ C|.
เราต้องหาค่า V สูงสุดที่เป็นไปได้จากชิ้นส่วนที่ OEM เลือก
ดังนั้น หากอินพุตเป็น 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 =17Category B =3 + 8 + 2 + 3 =16.Category C =5 + 5 + 7 + 6 =23 มูลค่ารวมของ V คือ 17 + 16 + 23 =56.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
N :=100Define an array arr of size:9 x N.Define an array ans.for initialize i :=0 when iตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeusing namespace std;const int INF =1e9;const int modval =(int) 1e9 + 7;#define N 100int แก้ (int n, int m, vector > การจัดอันดับ) { int V, arr[9][N]; vector ans; สำหรับ (int i =0; i > การให้คะแนน ={{2, 3, 5}, {3, 5, 2}, {4, 8, 5}, {1, 5, 3}, {7, 2 , 7}, {4, 3, 6}}; ศาล<<แก้ (n, m, การให้คะแนน); คืนค่า 0;} อินพุต
<ก่อนหน้า>6, 4, {{2, 3, 5}, {3, 5, 2}, {4, 8, 5}, {1, 5, 3}, {7, 2, 7}, {4 , 3,6}}
ผลลัพธ์
56