ข้อนี้ให้ตารางขนาด และต้องการให้เก็บมูลค่ารวมได้มากที่สุดจากตารางนี้โดยทุกการเก็บจะใช้เวลา 1 นาทีและช่องที่ จะไหม้และเก็บไม่ได้หาก เมื่อ คือเวลาในนาที (เช่นช่อง จะเก็บได้เมื่อ กล่าวคือต้องเก็บในนาทีแรกหรือนาทีที่ 2 หากจะเก็บ) ไฟจะไหม้ครบทุกช่องหลังเวลาที่
โจทย์ข้อนี้เป็นโจทย์ Greedy กล่าวคือในแต่ละขั้นควรเลือกของที่ดีที่สุด
Greedy Algorithm
เราสามารถพิสูจน์ว่าหากวางแผนการเลือกย้อนจากนาทีสุดท้ายมาถีงนาทีแรก ในแต่ละนาทีหากเลือกของที่มีมูลค่ามากสุดที่ยังไม่ได้วางแผนว่าจะเลือกจะทำให้ได้ผลรวมมากสุด
สังเกตว่าหากนับนาทีย้อนลงมาในแต่ละนาทีที่ลดลงจะมีตัวเลือกมากขึ้นเรื่อยๆ (เพราะมีของที่ยังไม่ไหม้มากขึ้น) และไม่มีตัวเลือกไหนหายไปหากไม่ได้เลือก เช่นในนาทีสุดท้าย จะเหลือเพียงของที่ ที่เก็บได้และควรเก็บอันนั้น และในนาทีก่อนหน้านั้น ต้องเลือกจาก และ และในนาที จะต้องเลือกจาก และอันที่ยังไม่ได้เลือกจาก กับ
เราจะพิสูจน์ว่าในเวลาที่ สามารถเลือกของที่มูลค่ามากสุดจากอันที่ยังไม่ไหม้และยังไม่ได้วางแผนว่าจะเลือกในเวลาอื่นที่ช้ากว่า เพื่อให้ได้ผลรวมสูงสุด ให้ของดังกล่าวเป็นชิ้น และให้การเลือกของ Algorithm ที่อธิบายไว้เป็น
สมมติว่าการเลือกที่ได้ผลรวมมากที่สุดคือ นั่นคือในเวลา จะเลือกของชิ้นที่ พิจารณา สุดท้ายที่ มีอยู่สองกรณีคือชิ้น ถูกเลือกในเวลา ซึ่งแปลว่ามี หรือ ไม่ถูกเลือกเลย ในกรณีแรกเราสามารถสลับการเลือก กับ (เพราะทั้งสองจะยังไม่ไหม้ในเวลา ) เพื่อให้ได้ลำดับใหม่ที่มี ส่วนในกรณีที่สองสามารถสลับ มาเป็นการเลือก ในเวลา แทนเพราะมูลค่าของ มีค่าไม่น้อยกว่าค่าอื่นใดๆ ที่ยังไม่ถูกเลือก (เนื่องจาก ตรงกับ ตามที่สมมติไว้)
ดังนั้นแปลว่ามีการเลือกที่ได้ผลรวมมากสุด โดยที่ สำหรับทุก กล่าวคือการเลือก เป็นการเลือกที่ได้ผลรวมมากที่สุดแบบหนึ่ง
Solution
เราสามารถ Implement การเลือกค่ามากสุดที่ยังไม่ถูกเลือกด้วย Priority Queue นั่นคือจาก ถึง เราจะ Push ค่าของของชิ้นที่อยู่ที่ ทุกตัวที่ เข้าไปใน Priority Queue และ Pop ค่ามากสุดใน Queue ออกมาเป็นตัวที่ถูกเลือกในเวลา
Priority Queue จะมีการ Push รอบ (หนึ่งครั้งสำหรับทุกค่าในตาราง) และการ Pop รอบ (หนึ่งครั้งสำหรับทุก ) การ Push และ Pop ต่างใช้เวลา ดังนั้นเวลาทั้งหมดคือ ซึ่งเร็วเพียงพอสำหรับ