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

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

수열 나누기

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

요약
수열을 연속된 k+1개 구간으로 나누어 절단 점수 합이 최대가 되는 분할을 구하고 점수와 절단 위치를 출력합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 분할 정복, 수학, 누적 합
정답자
아직 제출이 없습니다

문제

음이 아닌 정수 nn개로 이루어진 수열을 k+1k+1개의 비어 있지 않은 연속 부분으로 나눈다. 나누기를 kk번 수행하고, 한 번 나눌 때마다 새로 생긴 두 부분의 원소 합을 곱한 값을 점수로 받는다. 나누는 순서는 최종 점수에 영향을 주지 않는다. 받을 수 있는 점수의 최댓값과 그를 만드는 나누기 위치를 구한다.

입력

첫 줄에 nn, kk가 주어진다. (2≤n≤1000002 \le n \le 100000, 1≤k≤min⁡(n−1,200)1 \le k \le \min(n-1, 200)) 둘째 줄에 음이 아닌 정수 a1,…,ana_1, \ldots, a_n (0≤ai≤1040 \le a_i \le 10^4)이 주어진다.

출력

첫 줄에 최대 점수를 출력한다. 둘째 줄에 나누기 위치를 순서대로 출력한다. 여러 답이 있으면 아무거나 출력한다.

예제1

  1. 예제 1

    입력
    7 3
    4 1 3 4 0 2 3
    
    예상 출력
    108
    1 3 5