Lý lịch
Hãy tưởng tượng trong một khoảnh khắc mà bạn có một công việc nhàm chán đến khó chịu. Mỗi buổi sáng, bạn được giao một bộ sưu tập các nhiệm vụ mà bạn nên làm vào ngày hôm đó. Mỗi nhiệm vụ có một thời lượng nhất định và một khi bắt đầu, nó phải được hoàn thành trong một lần. Sếp của bạn sẽ không chịu được việc nhàn rỗi, vì vậy nếu có những nhiệm vụ mà bạn vẫn có thể hoàn thành trước khi về nhà, bạn phải làm việc với một trong số họ (bạn có thể chọn nhiệm vụ nào). Ngược lại, nếu tất cả các nhiệm vụ còn lại sẽ yêu cầu bạn phải làm thêm giờ, bạn phải về nhà sớm! Do đó, mục tiêu của bạn là giảm thiểu thời gian trong ngày làm việc của bạn bằng cách lập kế hoạch thông minh.
Sự thật thú vị: đây là một biến thể của vấn đề lập kế hoạch quan liêu lười biếng , và nó là NP-hard ( nguồn ).
Đầu vào
Bạn có hai đầu vào: số lượng "đơn vị thời gian" trong ngày làm việc của bạn (số nguyên dương L
) và bộ sưu tập các nhiệm vụ (một mảng số nguyên dương không trống T
, biểu thị thời lượng tác vụ). Chúng có thể được thực hiện theo bất kỳ thứ tự nào, và trong bất kỳ định dạng hợp lý. Mảng T
có thể chứa các tác vụ có thời lượng nhiều hơn L
, nhưng nó được đảm bảo chứa ít nhất một tác vụ có thời lượng nhiều nhất L
.
Đầu ra
Một lịch trình có giá trị là một tập hợp con các nhiệm vụ S ⊆ T
như vậy sum(S) ≤ L
, và mỗi nhiệm vụ không S
(bội đếm) có thời gian nghiêm ngặt hơn L - sum(S)
. Đầu ra của bạn sẽ là tổng nhỏ nhất có thể của một lịch trình hợp lệ. Nói cách khác, bạn sẽ xuất số lượng đơn vị thời gian tối thiểu bạn phải làm việc hôm nay.
Thí dụ
Xem xét các đầu vào
L = 9
T = [3,4,4,4,2,5]
Một cách để lên lịch cho ngày của bạn là [4,4]
: bạn hoàn thành hai nhiệm vụ trong 8 đơn vị thời gian và còn lại 1 đơn vị. Vì không có nhiệm vụ 1 đơn vị có sẵn, bạn có thể về nhà. Tuy nhiên, lịch trình [2,5]
thậm chí còn tốt hơn: bạn làm việc cho 7 đơn vị thời gian, và sau đó tất cả các nhiệm vụ còn lại sẽ mất 3 đơn vị thời gian trở lên. Lịch trình [2,4]
không hợp lệ, vì sau khi làm việc cho 6 đơn vị thời gian, bạn vẫn có đủ thời gian để hoàn thành nhiệm vụ 3 đơn vị. 7 đơn vị hóa ra là tối ưu, vì vậy đầu ra chính xác là 7
.
Quy tắc và tính điểm
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép. Không có thời gian ràng buộc, vì vậy vũ phu là hoàn toàn chấp nhận được.
Các trường hợp thử nghiệm
Chúng được đưa ra trong định dạng L T -> output
.
1 [1,2] -> 1
6 [4,1] -> 5
7 [7,7,9] -> 7
9 [3,4,4,4,2,5] -> 7
20 [6,2,3,12,7,31] -> 17
42 [7,7,7,7,8,8,8] -> 36
42 [7,7,7,7,7,8,8,8] -> 35
42 [7,7,7,7,7,7,8,8,8] -> 36
16 [1,2,3,4,5,6,7,8,9,10] -> 13
37 [15,27,4,1,19,16,20,26,29,18] -> 23
22 [24,20,8,8,29,16,5,5,16,18,4,9] -> 18
80 [10,22,11,2,28,20,27,6,24,9,10,6,27,2,15,29,27] -> 71
59 [26,28,5,4,7,23,5,1,9,3,7,15,4,23,7,19,16,25,26] -> 52