Task #010: Shift Scheduling – Tối Ưu Lịch Trực Ban Đêm Và Trực Chiến Trong N Tuần
146 Views
2 min read
Độ Khó: 3/5
Task Phân Công Lịch Trực Thực Tế
Có 23 nhân viên với ID từ 1 đến 23. Lập lịch trực trong nhiều tuần (số tuần do bạn nhập vào, ví dụ 5 tuần), với hai loại công việc hàng ngày:
Trực ban đêm: 1 người mỗi ngày.
Mỗi tuần, 7 nhân viên được phân công trực ban đêm theo thứ tự tuần tự (cuốn chiếu) dựa trên ID.
Quy luật cuốn chiếu:
Tuần 1: ID 1 đến 7 (ngày 1: 1, ngày 2: 2, …, ngày 7: 7).
Tuần 2: ID 8 đến 14 (ngày 1: 8, ngày 2: 9, …, ngày 7: 14).
Tuần 3: ID 15 đến 21.
Tuần 4: ID 22, 23, rồi quay lại 1 đến 5 (vì vượt quá 23).
Tuần 5: ID 6 đến 12, và tiếp tục quay vòng như vậy.
Trực chiến: 2 người mỗi ngày.
Mỗi tuần, có một tập hợp nhân viên được xác định trước (các nhân viên còn lại sau khi phân công tuần tự trực đêm), từ đó chọn ngẫu nhiên 2 người mỗi ngày.
Quy luật xác định pool:
Tuần 1: ID từ 8 đến 23. Vì ID từ 1 đến 7 đã được phân trực đêm.
Tuần 2: ID từ 15 đến 23 và 1 đến 7. Vì ID từ 8 đến 14 đã được phân trực đêm.
Tuần 3: ID từ 22 đến 23 và 1 đến 14. Vì ID từ 15 đến 21 đã được phân trực đêm.
Tuần 4: ID từ 6 đến 21. Vì ID 22, 23 và 1, 2, 3, 4, 5 đã được phân trực đêm.
Tuần 5: ID từ 13 đến 23 và 1 đến 5. Vì ID từ 6 đến 12 đã được phân trực đêm.
Mỗi ngày trong tuần, chọn 2 người khác nhau từ pool này.
Mỗi nhân viên trong pool chỉ được trực chiến tối đa 1 lần trong tuần.
Ràng buộc bổ sung:
Nhân viên trực ban đêm không được trực chiến trong cùng ngày.
Phân công cần công bằng: số lần trực chiến của mỗi nhân viên trong toàn bộ các tuần phải cân bằng nhau.