Nhiệm vụ của bạn là xây dựng một thuật toán (chương trình hoặc chức năng) có thể tối ưu hóa việc đóng gói trái cây từ băng chuyền vào túi để gửi đến các nhà bán lẻ, tối ưu hóa cho số lượng túi lớn nhất.
Mỗi túi phải có trọng lượng ít nhất là một số tiền nhất định, nhưng bất kỳ khoản dư thừa nào đều bị mất lợi nhuận vì trọng lượng đó có thể được sử dụng để lấp đầy một túi khác. Máy đóng bao của bạn luôn có một n
loại trái cây từ hàng đợi và chỉ có thể chọn thêm bất kỳ n
loại trái cây nào vào túi (đơn) đang được chế biến. Nó không thể nhìn xa hơn các n
yếu tố đầu tiên trong hàng đợi. Chương trình luôn biết chính xác có bao nhiêu cân trong túi.
Một cách khác để hình dung điều này là có một băng chuyền với diện tích tải n
ở cuối, từ đó phải lấy một quả trước khi quả mới đến. Bất kỳ trái cây còn sót lại và một túi không đầy đủ ở cuối được loại bỏ.
Đầu vào
- Danh sách / mảng trọng lượng của trái cây trong hàng đợi (số nguyên dương)
- Tổng trọng lượng tối thiểu cho túi (số nguyên dương)
- Lookahead
n
(số nguyên dương)
Đầu ra
Thuật toán của bạn sẽ trả về cho tất cả các túi trọng lượng của các loại trái cây trong đó, bằng bất kỳ phương tiện nào thuận tiện cho bạn và ngôn ngữ của bạn, là stdin hoặc giá trị trả về hoặc thứ gì khác. Bạn sẽ có thể chạy chương trình và tính điểm của bạn trong một phút trên máy tính của bạn.
Thí dụ
Total weight 1000, lookahead of 3 and fruit queue:
[171,163,172,196,156,175,162,176,155,182,189,142,161,160,152,162,174,172,191,185]
One possible output (indented to show how the lookahead affects the bagging):
[171,163,172, 156,175, 176]
[162, 155,182,189, 161,160]
[152,162,174,172,191,185]
Chấm điểm
Thuật toán của bạn sẽ được kiểm tra trên sáu lần chạy trên một lô 10000 quả cam tôi đã chuẩn bị cho bạn, trên các bảng tra cứu từ 2 đến 7, bao gồm cả hai đầu. Bạn sẽ đóng gói chúng vào túi có trọng lượng ít nhất 1000 đơn vị. Cam thường được phân phối với trọng lượng trung bình là 170 và độ lệch chuẩn là 13, nếu đó là bất kỳ trợ giúp.
Điểm của bạn sẽ là tổng số túi trong sáu lần chạy. Điểm cao nhất sẽ thắng. Sơ hở tiêu chuẩn là không được phép.
Ví dụ đơn giản triển khai và thử nghiệm bộ nồi hơi trong Haskell