Bài tập thưởng điểm
Xem dạng PDFTrên hệ thống chấm bài tự động của môn Kỹ thuật lập trình, thầy giáo mở ~n~ bài tập thưởng điểm. Các ngày được đánh số ~1, 2, 3, \ldots~ bắt đầu từ hôm nay (hôm nay là ngày ~1~). Bài tập thứ ~i~ có hạn là ngày ~d_i~ và điểm thưởng ~p_i~: nếu bài được làm vào một ngày có số thứ tự không vượt quá ~d_i~ thì sinh viên được cộng ~p_i~ điểm, còn làm sau ngày ~d_i~ thì không được điểm nào.
Bạn Hà còn bận nhiều môn học khác nên mỗi ngày chỉ làm được nhiều nhất một bài tập thưởng; mỗi bài được làm trọn vẹn trong một ngày. Hà không bắt buộc phải làm hết các bài.
Yêu cầu
Hãy giúp Hà chọn bài và xếp lịch làm bài sao cho tổng điểm thưởng nhận được là lớn nhất, và đưa ra tổng điểm đó.
Dữ liệu vào
- Dòng thứ nhất chứa số nguyên ~n~;
- ~n~ dòng tiếp theo, dòng thứ ~i~ chứa hai số nguyên ~d_i~ và ~p_i~.
Kết quả ra
Ghi ra một số nguyên duy nhất là tổng điểm thưởng lớn nhất có thể đạt được.
Ràng buộc
~1 \le n \le 2 \cdot 10^5~; ~1 \le d_i \le 10^9~; ~1 \le p_i \le 10^9~.
- Subtask 1 (10% số điểm – test 01–03): ~n \le 15~;
- Subtask 2 (20% số điểm – test 04–07): mọi ~d_i~ bằng nhau;
- Subtask 3 (30% số điểm – test 08–13): ~n \le 2000~;
- Subtask 4 (40% số điểm – test 14–20): không có ràng buộc bổ sung.
Lưu ý: kết quả có thể vượt quá phạm vi kiểu số nguyên 32 bit.
Ví dụ
Dữ liệu vào mẫu 1
4
3 50
1 40
2 30
1 10
Kết quả ra mẫu 1
120
Giải thích
Một lịch tối ưu: ngày ~1~ làm bài ~2~ (~40~ điểm), ngày ~2~ làm bài ~3~ (~30~ điểm), ngày ~3~ làm bài ~1~ (~50~ điểm); tổng cộng ~120~ điểm. Bài ~4~ có hạn là ngày ~1~ nhưng ngày ~1~ đã dành cho bài ~2~ nên phải bỏ.
Nếu cứ "bài nhiều điểm làm trước" – làm bài ~1~ ngay trong ngày ~1~ – thì bài ~2~ bị lỡ hạn và tổng điểm chỉ còn ~50 + 30 = 80~.
Bình luận