n개의 단어로 이루어진 텍스트가 있고, 단어에는 1번부터 n번까지 번호가 매겨져 있다. 이 텍스트를 k개의 줄로 나누는 분할은 수열 (a1,a2,…,ak−1)로 나타낸다. 즉, 1번부터 a1번까지의 단어는 첫째 줄에, a1+1번부터 a2번까지의 단어는 둘째 줄에, 이런 식으로 이어지며, 마지막으로 ak−1+1번부터 n번까지의 단어는 마지막 k번째 줄에 놓인다.
각 단어는 (문자 개수로 측정한) 길이를 가진다. length(x)를 x번 단어의 길이라고 하자. 또한 한 줄 안에서 이웃한 두 단어는 폭이 문자 하나인 공백으로 구분된다. 어떤 줄의 길이는 그 줄에 있는 단어 길이의 합에 단어 사이 공백의 개수를 더한 값으로 정의한다. w번째 줄의 길이를 line(w)라고 하자. 즉, w번째 줄이 i번부터 j번까지의 단어를 담고 있다면 그 길이는 다음과 같다.
line(w)=length(i)+length(i+1)+⋯+length(j)+(j−i)
다음 값을
∣line(1)−line(2)∣+∣line(2)−line(3)∣+⋯+∣line(k−1)−line(k)∣
이 분할의 미적 계수라고 부른다. 특히 줄이 하나뿐인 분할의 미적 계수는 0이다.
당연히 계수가 작을수록 더 균형 잡힌 분할이다. 우리는 어떤 줄의 길이도 정해진 상수 m을 넘지 않는 분할만 고려한다. 주어진 텍스트를 임의의 줄 수로 나눈 그런 모든 분할 중에서 가장 균형 잡힌 것, 즉 미적 계수가 가장 작은 것을 찾는다.
예를 들어 길이가 각각 4,3,2,5인 단어 4개로 이루어진 텍스트와 이를 3줄로 나눈 분할 (1,3)을 생각해 보자. 첫째 줄은 단어 1번(길이 4), 둘째 줄은 단어 2번과 3번(3+2+1=6), 셋째 줄은 단어 4번(길이 5)을 담는다.
XXXX
XXX XX
XXXXX
이 분할의 미적 계수는 ∣4−6∣+∣6−5∣=3이며, 이는 m=6일 때와 m=7일 때의 최소 미적 계수와 정확히 일치한다.
다음을 수행하는 프로그램을 작성하라.
첫째 줄에 두 정수 m과 n이 공백 하나로 구분되어 주어진다 (1≤m≤1,000,000, 1≤n≤2,000). 둘째 줄이자 마지막 줄에는 각 단어의 길이를 나타내는 n개의 정수가 공백 하나로 구분되어 주어진다. 모든 i=1,2,…,n에 대해 1≤length(i)≤m이다.
첫째 줄이자 유일한 줄에, 모든 줄의 길이가 m을 넘지 않는 분할의 최소 미적 계수를 정수 하나로 출력한다.