양의 정수로 이루어진 길이가 인 수열 이 있습니다. 그리고 모든 요소의 합이 인 의 부분 수열의 갯수를 로 하는 수열 가 있습니다. 우리의 목표는 수열 를 통해서 를 만들면 되는데 사전순으로 가장 앞에오는 수열을 구해야 합니다.
먼저, 수열 의 요소들 중 최솟값은 쉽게 구할 수 있습니다. 이고 이라면 최솟값은 이 됩니다.
만약에 최솟값 요소를 포함하는 모든 부분 수열들을 수열 에서 제거할 수 있다면 그 다음 작은 요소, 그 다음 작은 요소 순으로 의 요소를 하나 하나 찾아갈 수 있고 이를 번 반복하면 를 완성할 수 있습니다.
그럼 최솟값 요소를 포함하는 모든 부분 수열들을 수열 에서 어떻게 제거할 수 있을까요? 이건 아래와 같은 방법으로 할 수 있습니다.
이렇게 하면 수열 를 구할 수 있습니다. 하지만 정확히는 나올 수 있는 수열 중 하나를 구한 것이긴 합니다. 우리는 그 중 사전순으로 가장 작은 수열을 구해야 하는데 결론부터 말씀드리면 우리가 구한 수열 가 사전순으로 가장 작은 수열이 맞습니다.
만약 사전순으로 더 작은 수열 이 있다고 가정해보겠습니다. 그럼 인 모든 양의 정수에 대하여 이고 인 정수 가 존재합니다. 하지만 저희가 수열 에서 최소 요소를 포함하는 부분 수열을 제거하는 과정을 살펴보면 이건 불가능하다는 것을 알 수 있습니다. 그래서 저희가 구한 수열 가 사전순으로 가장 작은 수열임을 알 수 있습니다.
시간 복잡도는 입니다.