숫자 구슬

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

문제

N개의 숫자 구슬이 막대에 꿰어진 순서대로 일렬로 놓여 있다. 구슬은 막대에서 빼낼 수 없고, 순서를 바꿀 수도 없다.

이 구슬들을 순서를 유지한 채 M개의 연속한 그룹으로 나누려고 한다. 각 그룹에는 구슬이 적어도 하나 있어야 한다. 어떤 나누기에서 각 그룹의 숫자 합을 구했을 때, 그중 최댓값이 가능한 한 작아지도록 해야 한다.

조건을 만족하도록 M개의 그룹으로 나눌 때 가능한 최소 최댓값과, 왼쪽부터 각 그룹에 들어가는 구슬의 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 구슬의 개수 N과 그룹의 수 M이 주어진다. 둘째 줄에 각 구슬에 적힌 숫자가 왼쪽부터 순서대로 주어진다.

  • 1 <= M <= N <= 300
  • 각 구슬에 적힌 숫자는 1 이상 100 이하이다.

출력

첫째 줄에 각 그룹 합의 최댓값을 최소로 만들었을 때의 값을 출력한다. 둘째 줄에 왼쪽부터 각 그룹을 이루는 구슬의 개수를 공백으로 구분해 출력한다.

최적의 나누기가 여러 가지라면 그중 아무 것이나 출력해도 된다.