아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

지도

시간 제한3초메모리 제한128 MB

요약
n개 지역의 인구를 m개 색으로 나누어, 각 색에서 중앙값과 인구 차이의 합이 최소가 되도록 만드는 문제다. 중앙값은 절반 조건을 만족하는 임의의 값이 될 수 있다.
난이도

보통10점 중 7점

유형
동적 계획법, 정렬, 그리디, 누적 합
정답자
아직 제출이 없습니다

문제

바이트랜드가 행정 구역을 새로 나눈 뒤, 지도 제작소는 나라의 새 인구 분포 지도를 만들고 있다. 기술적인 이유로 쓸 수 있는 색은 몇 가지뿐이다. 인구(주민 수)가 같거나 비슷한 지역끼리 같은 색을 갖도록 지도를 칠해야 한다.

색 kk에 대하여, 값 A(k)A(k)를 다음을 만족하도록 정한다.

  • 색 kk로 칠한 지역 중 적어도 절반은 인구가 A(k)A(k) 이하이고,
  • 색 kk로 칠한 지역 중 적어도 절반은 인구가 A(k)A(k) 이상이다.

즉 A(k)A(k)는 색 kk로 칠한 지역들의 인구의 중앙값이다.

색 kk로 칠한 한 지역의 칠하기 오차는 ∣A(k)−p∣|A(k) - p|이며, 여기서 pp는 그 지역의 인구이다. 누적 오차는 모든 지역의 칠하기 오차를 모두 더한 값이다. 누적 오차가 가장 작아지는 최적의 칠하기를 찾는다.

바이트랜드 각 지역의 인구를 읽어 최소 누적 오차를 계산한 뒤 표준 출력에 쓰는 프로그램을 작성하라.

입력

첫째 줄에 지역의 수 nn이 주어지며, 10<n<300010 < n < 3000이다.

둘째 줄에 지도를 칠하는 데 사용하는 색의 수 mm이 주어지며, 2≤m≤102 \le m \le 10이다.

이어지는 nn개의 줄에는 각 줄마다 한 지역의 인구를 나타내는 음이 아닌 정수가 하나씩 주어진다. 어떤 인구도 2302^{30}을 넘지 않는다.

출력

최적으로 칠했을 때 얻을 수 있는 최소 누적 오차를 정수 하나로 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    11
    3
    21
    14
    6
    18
    10
    2
    15
    12
    3
    2
    2
    
    예상 출력
    15