주어진 실력을 가진 N명의 참가자를 높이가 K 이하인 토너먼트 대진표의 리프에 배치해 모든 경기의 실력 차 합을 최소로 만든다.
어려움8동적 계획법정렬트리그리디아직 제출이 없습니다시간 제한5초메모리 제한512 MB매년 열리는 프로그래밍 대회의 대진표를 짜려고 한다. 올해 대회에는 참가자 N명이 나오고, 대회는 토너먼트 방식으로 치른다.
토너먼트는 잎 노드가 N개인 이진 트리로 나타내고, 참가자를 잎 노드에 한 명씩 배정한다. 한 경기에서는 두 참가자가 맞붙어서 이긴 쪽이 다음 라운드로 올라가고 진 쪽은 탈락한다. 끝까지 살아남은 한 명이 우승자이고, 결승전은 트리의 루트 노드에 대응한다.
참가자 i의 실력은 정수 Ai이다. 두 참가자가 맞붙으면 실력이 더 큰 쪽이 항상 이긴다. 실력이 같으면 승자는 무작위로 정해진다.
지난 대회에서는 한쪽으로 크게 기운 경기가 너무 많아 지루하다는 불만이 있었다. 그래서 경기의 지루함과 토너먼트의 지루함을 다음과 같이 정한다. 실력이 Ai인 참가자와 실력이 Aj인 참가자가 맞붙는 경기의 지루함은 두 실력의 차이 ∣Ai−Aj∣이다. 토너먼트의 지루함은 트리에 있는 모든 경기의 지루함을 더한 값이다.
토너먼트의 높이가 K 이하이기만 하면 균형이 맞지 않는 모양을 포함해 어떤 모양이든 쓸 수 있다. 토너먼트의 높이는 루트 노드에서 잎 노드까지 이어지는 단순 경로에 놓인 경기 수의 최댓값이다.
지루함의 최솟값을 구하는 프로그램을 작성하라.

그림 1. 첫 번째 예제에서 만들 수 있는 토너먼트 두 가지. 왼쪽은 높이가 2이고 오른쪽은 높이가 3이다.
입력은 테스트 케이스 하나로 이루어지고, 형식은 다음과 같다.
N K
A_1 A_2 ... A_N
첫째 줄에 정수 N과 K가 주어진다. (2≤N≤1000, 1≤K≤50) N≤2K가 보장된다.
둘째 줄에 참가자의 실력 A1,A2,…,AN이 주어진다. (1≤Ai≤100000)
높이가 K 이하인 토너먼트 중에서 지루함이 가장 작은 값을 출력한다.