โจทย์ทั้งหมด
ยาก 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

รางวัลสูงสุดจากโปรเจกต์

เลือกโปรเจกต์ที่ไม่ทับซ้อนกันเพื่อให้ได้รางวัลรวมมากที่สุด

แต่ละโปรเจกต์อยู่ในรูปแบบ [start_day, end_day, reward] โดยจะใช้วันตั้งแต่ start_day ถึง end_day (รวมทั้งสองวัน) คุณสามารถเข้าร่วมโปรเจกต์ได้เพียงหนึ่งโปรเจกต์ต่อวันเท่านั้น เลือกชุดโปรเจกต์ที่ให้รางวัลรวมมากที่สุด โปรเจกต์ที่เริ่มในวันเดียวกับวันสิ้นสุดของโปรเจกต์อื่นถือว่าทับซ้อนกัน

ให้เขียนฟังก์ชัน project_rewards(projects)

อินพุต

projects: แต่ละแถวเป็นจำนวนเต็มสามตัว: วันเริ่มต้น วันสิ้นสุด และรางวัล

เอาต์พุต

ให้คืนค่ารางวัลรวมสูงสุดที่สามารถเลือกได้ ไม่ต้องคืนชุดโปรเจกต์ที่เลือก

เงื่อนไข

1 ≤ projects ≤ 200,000 1 ≤ start_day ≤ end_day ≤ 1,000,000,000 รางวัลเป็นจำนวนเต็มบวกไม่เกิน 1,000,000,000

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
projects = [
    [1, 2, 4],
    [3, 4, 5],
    [2, 3, 10]
]

ผลลัพธ์ที่คาดหวัง:
expected = 10
อินพุต:
std::vector<std::vector<long long>> projects = {
    {1, 2, 4},
    {3, 4, 5},
    {2, 3, 10}
};

ผลลัพธ์ที่คาดหวัง:
long long expected = 10;
อินพุต:
long[][] projects = new long[][] {
    new long[] {1, 2, 4},
    new long[] {3, 4, 5},
    new long[] {2, 3, 10}
};

ผลลัพธ์ที่คาดหวัง:
long expected = 10;

คำอธิบาย

สองโปรเจกต์แรกได้รางวัลรวม 9 โปรเจกต์สุดท้ายได้ 10 แต่ทับซ้อนกับทั้งสองอันแรก ดังนั้นควรเลือกอันเดียว

ตัวอย่างที่ 2
อินพุต:
projects = [
    [1, 2, 4],
    [2, 3, 5]
]

ผลลัพธ์ที่คาดหวัง:
expected = 5
อินพุต:
std::vector<std::vector<long long>> projects = {
    {1, 2, 4},
    {2, 3, 5}
};

ผลลัพธ์ที่คาดหวัง:
long long expected = 5;
อินพุต:
long[][] projects = new long[][] {
    new long[] {1, 2, 4},
    new long[] {2, 3, 5}
};

ผลลัพธ์ที่คาดหวัง:
long expected = 5;

คำอธิบาย

ทั้งสองโปรเจกต์ใช้วันที่ 2 ทับซ้อนกัน ให้เลือกแค่โปรเจกต์ที่สองซึ่งได้รางวัล 5

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก