#128. Lập lịch công việc tối ưu (Mã bài: RIDDLE)

Bộ nhớ: 512 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Cho một giá trị nguyên dương ban đầu m n công việc cần xử lý. Mỗi công việc i ( 1 \le i \le n ) được đặc trưng bởi hai thông số:

  • t_i : Thời hạn (deadline) để hoàn thành công việc.
  • w_i : Chi phí phạt nếu công việc không được hoàn thành đúng hạn.

Quy tắc thực hiện:

  1. Mỗi công việc tiêu tốn đúng 1 đơn vị thời gian để hoàn thành.
  2. Tại mỗi đơn vị thời gian, chỉ có thể thực hiện tối đa một công việc.
  3. Công việc i được coi là hoàn thành đúng hạn nếu nó được bắt đầu và kết thúc tại một thời điểm k sao cho k \le t_i .
  4. Với mỗi công việc không hoàn thành đúng hạn, giá trị m sẽ bị trừ đi một lượng tương ứng w_i .

Yêu cầu: Hãy tìm cách sắp xếp thứ tự thực hiện các công việc sao cho giá trị m còn lại sau khi trừ các khoản phạt là lớn nhất.

Dữ liệu:

  • Dòng đầu tiên chứa số nguyên dương m ( m là số tiền ban đầu).
  • Dòng thứ hai chứa số nguyên dương n ( n là số lượng công việc).
  • Dòng thứ ba gồm n số nguyên t_1, t_2, \dots, t_n biểu thị thời hạn của từng công việc.
  • Dòng thứ tư gồm n số nguyên w_1, w_2, \dots, w_n biểu thị chi phí phạt của từng công việc.

Kết quả:

  • Một số nguyên duy nhất là giá trị m lớn nhất có thể đạt được.

Ví dụ:

Dữ liệu:

10000
7
4 2 4 3 1 4 6
70 60 50 40 30 20 10

Kết quả:

9950

Giải thích: Ta chọn thực hiện các công việc có mức phạt \{70, 60, 50, 40, 20, 10\} đúng hạn. Chỉ bỏ lỡ công việc có mức phạt 30 . Tổng phạt tối thiểu là 50 . Giá trị còn lại: 10000 - 50 = 9950 .

Giới hạn:

  • n \le 500 , 1 \le t_i \le n .