Bố trí phòng học
Xem dạng PDF
Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
inp
Output:
out
Dạng bài
Bài toán: Bố trí phòng học
Mô tả
Có n phòng học chuyên đề và k nhóm học sinh, được đánh số từ nhỏ đến lớn.
Cần xếp k nhóm trên vào một số phòng sao cho:
- Mỗi nhóm được xếp vào đúng một phòng.
- Mỗi phòng dùng nhiều nhất cho một nhóm.
- Nếu nhóm có số hiệu nhỏ hơn được xếp vào phòng số
ithì nhóm có số hiệu lớn hơn phải được xếp vào một phòng có số hiệu lớn hơni. - Một nhóm chỉ có thể xếp vào phòng có đủ số ghế.
Gọi a[i] là số ghế của phòng thứ i, b[j] là số học sinh của nhóm thứ j.
Nếu xếp nhóm j vào phòng i thì số ghế thừa là a[i] - b[j] (điều kiện a[i] >= b[j]).
Hãy chọn một phương án bố trí sao cho tổng số ghế thừa của các phòng được sử dụng là nhỏ nhất.
Dữ liệu vào
Đọc từ tệp Botriphonghoc.inp:
- Dòng 1: hai số nguyên dương
n, k(1 <= k <= n <= 10000) - Dòng 2:
nsố nguyêna[i](1 <= a[i] <= 1000) — số ghế của các phòng - Dòng 3:
ksố nguyênb[j](1 <= b[j] <= 1000) — số học sinh của các nhóm
Dữ liệu ra
Ghi ra tệp Botriphonghoc.out một số nguyên duy nhất: tổng số ghế thừa nhỏ nhất.
Ví dụ
Botriphonghoc.inp
5 3
25 30 35 40 45
30 25 40
Botriphonghoc.out
10
Giải thích ví dụ
Một cách bố trí tối ưu là:
- Nhóm 1 (30 học sinh) vào phòng 3 (35 ghế), thừa
5ghế - Nhóm 2 (25 học sinh) vào phòng 2 (30 ghế), thừa
5ghế - Nhóm 3 (40 học sinh) vào phòng 4 (40 ghế), thừa
0ghế
Tổng số ghế thừa là 5 + 5 + 0 = 10.
Lưu ý rằng thứ tự nhóm phải tương ứng với thứ tự phòng được chọn.
Gợi ý
Đây là bài toán quy hoạch động:
dp[i][j]: chi phí nhỏ nhất khi xétiphòng đầu tiên và đã xếp đượcjnhóm đầu tiên- Có thể:
- bỏ qua phòng
i - hoặc dùng phòng
iđể xếp cho nhómjnếua[i] >= b[j]
- bỏ qua phòng
Có thể tối ưu bộ nhớ xuống O(k).
Bình luận