여행자는 도시 외곽 호텔에서 n 일 동안 숙박해야 합니다. 현금이 부족하고 신용 카드가 만료되었습니다. 그러나 그는 n 과 금 사슬을 가지고 링크 있습니다.
이 호텔의 규칙은 주민들이 매일 아침 집세를 내야한다는 것입니다. 여행자는 관리자와 계약을 맺고 매일 골든 체인의 링크 하나를 지불합니다. 그러나 관리자는 여행자가 매일 지불하면서 체인에 최소한의 손상을 입히도록 요구합니다. 다시 말해, 가능한 적은 링크를 줄일 수있는 솔루션을 고안해야합니다.
링크를 자르면 3 개의 서브 체인이 만들어집니다. 하나는 절단 링크 만 포함하고 다른 하나는 각면에 있습니다. 예를 들어, 길이가 8 인 체인의 세 번째 링크를 절단하면 길이가 [2, 1, 5] 인 하위 체인이 생성됩니다. 관리자는 기꺼이 변경하여 여행자는 첫 번째 날을 길이 1 체인으로 지불 한 다음 두 번째 날을 길이 2 체인으로 지불하여 첫 번째 체인을 되 찾을 수 있습니다.
코드는 길이 n을 입력하고 최소 길이를 잘라 내기위한 링크 목록을 출력해야합니다.
규칙 :
- n 은 0보다 큰 정수입니다.
- 링크에 0 기반 또는 1 기반 색인을 사용할 수 있습니다.
- 일부 숫자의 경우 솔루션이 고유하지 않습니다. 예를 들어,
n = 15
양[3, 8]
및[4, 8]
유효한 출력한다. - 목록을 반환하거나 적절한 구분 기호로 인쇄하십시오.
- 이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
테스트 사례 :
Input Output (1-indexed)
1 []
3 [1]
7 [3]
15 [3, 8]
149 [6, 17, 38, 79]
자세한 예
들면 N 링크 (3) 및 길이가 8 개 subchains 결과 절단 = 15 [2, 1, 4, 1, 7]
. 다음과 같은 이유로 유효한 솔루션입니다.
1 = 1
2 = 2
3 = 1+2
4 = 4
5 = 1+4
6 = 2+4
7 = 7
8 = 1+7
9 = 2+7
10 = 1+2+7
11 = 4+7
12 = 1+4+7
13 = 2+4+7
14 = 1+2+4+7
15 = 1+1+2+4+7
한 번의 절단 만있는 솔루션이 없으므로 최적의 솔루션입니다.
추가
이 문제는 정수 파티셔닝과 관련이 있습니다. 1에서 n 까지의 모든 정수 가 P 의 하위 집합 인 하나 이상의 패션을 갖도록 n 의 파티션 P 를 찾고 있습니다.
여기의 YouTube 동영상 이 문제에 대한 하나의 가능한 알고리즘에 대한이.
1+2
. 두 번째 2 링크 체인은 어디에서 왔습니까?