Bài toán sắp công việc
Xem dạng PDFĐề bài
Bạn cần xử lý ~ n ~ công việc. Mỗi công việc có thời lượng ~ a ~ và một hạn chót ~ d ~. Các công việc được thực hiện theo một thứ tự nào đó, mỗi công việc bắt đầu ngay khi công việc trước đó kết thúc.
Phần thưởng của một công việc là: ~ d - f ~ với:
- ~ d ~: hạn chót của công việc.
- ~ f ~: thời điểm hoàn thành công việc (tổng thời gian từ 0 đến khi công việc đó hoàn thành).
Bạn cần xử lý tất cả các công việc, kể cả khi phần thưởng của một công việc là âm.
Nhiệm vụ: Sắp xếp thứ tự thực hiện công việc sao cho tổng phần thưởng lớn nhất.
Input
- Dòng đầu tiên chứa số nguyên ~ n ~ (~ 1 \leq n \leq 2 \times 10^5 ~): số lượng công việc.
- ~ n ~ dòng tiếp theo, mỗi dòng chứa hai số nguyên ~ a ~ và ~ d ~ (~ 1 \leq a, d \leq 10^6 ~): thời lượng và hạn chót của công việc.
Output
- Một số nguyên: tổng phần thưởng lớn nhất có thể đạt được.
Ràng buộc
- ~ 1 \leq n \leq 2 \times 10^5 ~
- ~ 1 \leq a, d \leq 10^6 ~
Ví dụ
Input:
3
6 10
8 15
5 12
Output:
2
Giải thích:
- Thực hiện theo thứ tự: ~ [5, 12],[6, 10],[8, 15] ~.
- Thời gian hoàn thành từng công việc:
- Công việc 1: ~ f = 5 ~, phần thưởng = ~ 12 - 5 = 7 ~.
- Công việc 2: ~ f = 6 + 5 = 11 ~, phần thưởng = ~ 10 - 11 = -1 ~.
- Công việc 3: ~ f = 11 + 8 = 19 ~, phần thưởng = ~ 15 - 19 = -4 ~.
- Tổng phần thưởng = ~ 7 - 1 - 4 = 2 ~.
Bình luận
Gửi bài giải
Kotlin
PyPy
Điểm:
10,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Nguồn bài:
CSES
Dạng bài
CSES
Ngôn ngữ cho phép
C
C++
Java
Pascal
Python
Scratch