배경
지루하게 지루한 직업을 가지고 있다고 상상해보십시오. 매일 아침, 그 날에해야 할 일들을 모아 놓았습니다. 각 작업에는 일정한 기간이 있으며 일단 시작되면 한 번에 완료해야합니다. 상사는 유휴를 용납하지 않으므로 집에 가기 전에 아직 완료 할 수있는 작업이 있으면 그 중 하나를 수행해야합니다 (어느 쪽을 선택할 수 있는지). 반대로, 남아있는 모든 일로 인해 초과 근무가 필요한 경우 일찍 집에 가야합니다! 따라서 목표는 영리한 일정으로 업무 시간을 최소화하는 것입니다.
재미있는 사실 : 이것은 게으른 관료주의 일정 문제 의 한 변형 이며 NP-hard ( source )입니다.
입력
근무일의 "시간 단위"수 (양의 정수 L
)와 작업 모음 ( T
작업 기간을 나타내는 비어 있지 않은 양의 정수 배열)의 두 가지 입력이 있습니다 . 그것들은 임의의 순서와 합리적인 형식으로 취할 수 있습니다. 배열 T
에는 기간이 초과 된 작업이 포함되어있을 수 L
있지만 최대 기간이있는 작업이 하나 이상 포함되어 있어야 L
합니다.
산출
유효한 일정은 작업의 하위 집합입니다 S ⊆ T
같은 것을 sum(S) ≤ L
, 그리고 모든 작업 S
(계산 다중성)은 엄격 이상의 기간이 있습니다 L - sum(S)
. 출력은 유효한 일정의 가장 작은 합계입니다. 다시 말해, 오늘 작업해야하는 최소 시간 단위를 출력해야합니다.
예
입력을 고려하십시오
L = 9
T = [3,4,4,4,2,5]
하루 일정을 잡는 한 가지 방법은 [4,4]
8 개의 시간 단위로 2 개의 작업을 완료하고 1 개의 단위를 남겨 둡니다. 사용 가능한 1 단위 작업이 없으므로 집에 갈 수 있습니다. 그러나 일정 [2,5]
이 더 좋습니다. 7 개의 시간 단위로 작업 한 다음 나머지 모든 작업에는 3 개 이상의 시간 단위가 필요합니다. [2,4]
6 시간 단위로 작업 한 후에도 3 단위 작업을 완료하기에 충분한 시간이 남아 있으므로 스케줄 이 유효하지 않습니다. 7 단위가 최적으로 밝혀 지므로 올바른 출력은 7
입니다.
규칙과 득점
전체 프로그램이나 함수를 작성할 수 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점은 허용되지 않습니다. 시간 제한이 없으므로 무차별 강제 적용은 완벽하게 허용됩니다.
테스트 사례
이것들은 형식으로 제공됩니다 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