만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

탈옥

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

요약
L개의 감방을 최대 G개의 연속한 구간으로 나눌 때, 각 감방의 탈출력과 소속 구간 길이의 곱을 모두 더한 값을 최소로 만든다.
난이도

어려움10점 중 8점

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

문제

칸 LL개가 일렬로 놓인 감옥이 있다. 칸에는 1번부터 LL번까지 번호가 붙어 있고, ii번 칸에는 죄수가 한 명씩 들어 있다. ii번 칸에 있는 죄수의 탈옥력은 CiC_i이며, 탈옥력은 죄수가 탈옥하는 능력을 수치로 나타낸 값이다.

가장 이상적인 감시 방법은 칸마다 간수를 한 명씩 두어서 간수 한 명이 죄수 한 명만 감시하는 것이다. 하지만 예산 때문에 이 감옥은 간수를 최대 GG명까지만 고용할 수 있다. 탈옥 위험도가 가장 작아지도록 간수를 고용해서 배치하려고 한다.

간수 한 명은 번호가 연속한 칸만 감시하고, 모든 칸은 정확히 한 명의 간수가 감시한다. ii번 칸의 탈옥 위험도 RiR_i는 탈옥력 CiC_i에 ii번 칸을 맡은 간수가 감시하는 죄수 수를 곱한 값이다. 감옥의 탈옥 위험도는 모든 칸의 RiR_i를 더한 값이다.

LL과 GG, 각 칸에 있는 죄수의 탈옥력 CiC_i가 주어질 때 탈옥 위험도의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 감옥의 크기 LL과 간수의 수 GG가 공백으로 구분되어 주어진다. (1≤L≤80001 \le L \le 8000, 1≤G≤8001 \le G \le 800)

둘째 줄에 C1,C2,…,CLC_1, C_2, \dots, C_L이 공백으로 구분되어 주어진다. (1≤Ci≤1091 \le C_i \le 10^9)

출력

첫째 줄에 탈옥 위험도의 최솟값을 출력한다.

힌트

첫 번째 예제에서 한 간수가 1, 2, 3번 칸을, 다른 간수가 4, 5번 칸을, 남은 간수가 6번 칸을 감시하면 탈옥 위험도가 최소가 된다.

1, 2, 3번 칸을 맡은 간수는 죄수 세 명을 감시하므로 세 칸의 탈옥 위험도는 각각 11×3=3311 \times 3 = 33이다.

4, 5번 칸을 맡은 간수는 죄수 두 명을 감시하므로 4번 칸은 24×2=4824 \times 2 = 48, 5번 칸은 26×2=5226 \times 2 = 52이다.

6번 칸을 맡은 간수는 죄수 한 명만 감시하므로 6번 칸은 100×1=100100 \times 1 = 100이다. 모두 더하면 33×3+48+52+100=29933 \times 3 + 48 + 52 + 100 = 299이다.

예제5

  1. 예제 1

    입력
    6 3
    11 11 11 24 26 100
    
    예상 출력
    299
    
  2. 예제 2

    입력
    1 1
    1000000000
    
    예상 출력
    1000000000
    
  3. 예제 3

    입력
    5 5
    1 2 3 4 5
    
    예상 출력
    15
    
  4. 예제 4

    입력
    4 1
    1 2 3 4
    
    예상 출력
    40
    
  5. 예제 5

    입력
    2 1
    1000000000 1000000000
    
    예상 출력
    4000000000