만드는 중입니다

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

오렌지 출하

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

요약
컨베이어 위 귤을 순서대로 최대 M개씩 상자에 나누어 담을 때 상자당 포장비와 크기 차이에 개수를 곱한 비용의 합을 최소화합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 슬라이딩 윈도우
정답자
아직 제출이 없습니다

문제

Juicy Orange Industry(JOI)는 맛있는 오렌지를 상자에 포장해 출하하는 회사다.

JOI는 모아 둔 오렌지 NN개를 상자에 담아 출하한다. 먼저 오렌지를 공장의 컨베이어 벨트 위에 한 줄로 놓는다. 벨트 위의 오렌지에는 앞에서부터 차례로 11번부터 NN번까지 번호가 붙어 있고, ii번 오렌지의 크기는 AiA_i이다.

다음으로 오렌지를 앞에서부터 순서대로 상자에 나누어 담는다. 한 상자에 담는 오렌지의 번호는 연속해야 한다.

한 상자에는 오렌지를 최대 MM개까지 담을 수 있다. 상자 하나에 오렌지를 담는 비용은 K+s×(a−b)K + s \times (a - b)이다. 여기서 aa는 그 상자에 담은 오렌지 크기의 최댓값, bb는 최솟값, ss는 담은 오렌지의 개수다. KK는 상자를 포장하는 비용이고 모든 상자에 똑같이 적용된다.

컨베이어 벨트 위에 놓인 오렌지의 정보, 한 상자에 담을 수 있는 오렌지 개수의 최댓값, 상자를 포장하는 비용 KK가 주어질 때 오렌지를 모두 포장하는 비용의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 오렌지의 개수 NN (1≤N≤20 0001 \le N \le 20\,000), 한 상자에 담을 수 있는 오렌지 개수의 최댓값 MM (1≤M≤1 0001 \le M \le 1\,000, M≤NM \le N), 상자를 포장하는 비용 KK (0≤K≤1 000 000 0000 \le K \le 1\,000\,000\,000)가 공백으로 구분되어 주어진다.

둘째 줄부터 NN개의 줄에 오렌지의 크기 AiA_i (1≤Ai≤1 000 000 0001 \le A_i \le 1\,000\,000\,000)가 순서대로 한 줄에 하나씩 주어진다.

출력

첫째 줄에 오렌지를 모두 포장하는 비용의 최솟값을 출력한다.

예제4

  1. 예제 1

    입력
    6 3 6
    1
    2
    3
    1
    2
    1
    
    예상 출력
    21
    
  2. 예제 2

    입력
    16 4 12
    3
    10
    13
    10
    19
    9
    12
    16
    11
    2
    19
    9
    13
    2
    13
    19
    
    예상 출력
    164
    
  3. 예제 3

    입력
    16 6 14
    19
    7
    2
    15
    17
    7
    14
    12
    3
    14
    5
    10
    17
    20
    19
    12
    
    예상 출력
    177
    
  4. 예제 4

    입력
    10 1 1000000000
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    
    예상 출력
    10000000000