ในบทความนี้ เราจะพูดถึงปัญหาของการจัดเรียงอาร์เรย์ของตัวเลข n ใหม่ โดยพื้นฐานแล้ว เราต้องเลือกองค์ประกอบจากอาร์เรย์ สำหรับการเลือกแต่ละองค์ประกอบ เราได้รับคะแนนบางส่วนที่จะประเมินโดยค่าขององค์ประกอบปัจจุบัน * องค์ประกอบจำนวนหนึ่งที่เลือกก่อนองค์ประกอบปัจจุบัน คุณควรเลือกองค์ประกอบเพื่อให้ได้คะแนนสูงสุด ตัวอย่างเช่น −
Input : arr[ ] = { 3, 1, 5, 6, 3 }
If we select the elements in the way it is given, our points will be
= 3 * 0 + 1 * 1 + 5 * 2 + 6 * 3 + 3 * 4
= 41
To maximize the points we have to select the elements in order { 1, 3, 3, 5, 6 }
= 1 * 0 + 3 * 1 + 3 * 2 + 5 * 3 + 6 * 4
= 48(maximum)
Output : 48
Input : arr[ ] = { 2, 4, 7, 1, 8 }
Output : 63 แนวทางในการหาทางออก
จากตัวอย่าง เราเข้าใจเพื่อให้ได้คะแนนสูงสุด และเราต้องเลือกองค์ประกอบจากเล็กที่สุดไปหาใหญ่ที่สุด แนวทางในการหาแนวทางแก้ไขคือ
- เรียงลำดับอาร์เรย์ที่กำหนดจากน้อยไปหามาก
- เริ่มเลือกองค์ประกอบจากดัชนี 0 ถึงจุดสิ้นสุด
- คำนวณคะแนนที่คุณได้รับจากการเลือกแต่ละองค์ประกอบ
ตัวอย่าง
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int main () {
int arr[] = { 2, 4, 7, 1, 8 };
int n = sizeof (arr) / sizeof (arr[0]);
// sorting the array
sort (arr, arr + n);
int points = 0;
// traverse the array and calculate the points
for (int i = 0; i < n; i++) {
points += arr[i] * i;
}
cout << "Maximum points: " << points;
return 0;
} ผลลัพธ์
Maximum points: 63
คำอธิบายของโค้ดด้านบน
รหัส C ++ นี้เข้าใจง่าย ขั้นแรก เรากำลังจัดเรียงอาร์เรย์ จากนั้นสำรวจอาร์เรย์โดยใช้ a for loop และคำนวณคะแนนที่ได้รับโดยการเลือกแต่ละองค์ประกอบตั้งแต่ต้นจนจบ
บทสรุป
ในบทความนี้ เราจะพูดถึงปัญหาในการเลือกองค์ประกอบในอาร์เรย์เพื่อให้ได้คะแนนสูงสุดโดย i * arr[i] คำนวณคะแนน เราใช้วิธีการที่โลภในการแก้ปัญหานี้และได้รับคะแนนสูงสุด พูดคุยเรื่องโค้ด C++ เพื่อทำเช่นเดียวกัน เราสามารถเขียนโค้ดนี้ในภาษาอื่นๆ เช่น C, java, Python เป็นต้น หวังว่าบทความนี้จะเป็นประโยชน์