유저의 레벨이 부터 까지 있는 RPG 게임에 대해서, 레벨 인 유저의 수 가 주어진다. 레벨 인 유저의 수 는 보다 크거나 같고 보다 작거나 같음이 보장된다.
유저를 개의 그룹으로 나누려 한다. 같은 레벨인 유저는 같은 그룹에 속해야만 하며, 각 개의 그룹은 연속한 레벨의 유저로 구성되어야 한다. 또한, 각 유저는 정확히 하나의 그룹에 속해야 한다.
가장 많은 유저가 속한 그룹의 유저 수와 가장 적은 유저가 속한 그룹의 유저 수의 차이를 최소화하도록 개의 그룹으로 나누었을 때의 차이를 구하는 프로그램을 작성하시오.
입력 형식
첫 줄에 세 개의 정수 , , 가 공백으로 구분되어 주어진다.
다음 줄에 개의 정수 가 공백으로 구분되어 주어진다.
출력 형식
첫 줄에 개의 그룹으로 나누었을 때, 가장 많은 유저가 속한 그룹의 유저 수와 가장 적은 유저가 속한 그룹의 유저 수 차이의 최솟값을 출력한다.
예제
입력
7 2 1 1 1 2 1 1 1 2
출력
1
예제 설명
레벨 이상 이하인 유저들을 그룹 로, 레벨 이상 이하인 유저들을 그룹 로 배정하면, 명의 유저들이 그룹 에 있게 되고 명의 유저들이 그룹 에 있게 된다.
이때, 가장 많은 유저가 속한 그룹의 유저 수와 가장 적은 유저가 속한 그룹의 유저 수의 차이는 이 되고, 이보다 차이가 작은 그룹 구성은 존재하지 않는다.
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 8점
종류 2: 23점
종류 3: 69점
추가적인 제한 조건이 없음.
해설
개의 파티션 중 최소가 되는 파티션의 원소 합은 보다 작거나 같습니다. 모든 원소의 값이 이상 이하이기 때문에 최소로 가능한 파티션 후보개수는 가 됩니다.
최소로 가능한 파티션의 원소 합을 결정하면, 모든 파티션의 원소 합이 결정한 값 이상일 때 가장 원소의 합이 큰 파티션의 값을 최소화 하는 문제는 동적계획법을 통해 문제를 해결할 수 있습니다.
의 최소값으로 정의하면 해당 테이블은 Divide & Conquer Optimization이 가능하고, 에 해당 테이블을 채울 수 있다. 따라서 총 시간 복잡도 에 문제를 해결할 수 있습니다.