지붕 덮인 통로

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

요약
직선 위에서 반드시 덮어야 할 점들을 구간으로 나누어 덮되, x에서 y까지 덮는 비용이 c + (x - y)의 제곱일 때 전체 최소 비용을 구한다.
난이도

보통10점 중 7점

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

문제

어떤 대학교에서 새 통로를 만들려고 하는데, 통로의 적어도 일부에는 반드시 지붕(덮개)을 씌우려고 합니다. 통로 위에는 반드시 덮여야 하는 특정 지점들이 있습니다. 그 밖의 지점들은 덮이든 덮이지 않든 상관없습니다.

시공업체의 요금 정책은 다음과 같습니다. 통로의 위치 xx부터 위치 yy까지를 덮는 데는 c+(x−y)2c + (x - y)^2의 비용이 들며, 여기서 cc는 상수입니다. x=yx = y인 경우도 가능하며, 이때 비용은 그냥 cc가 됩니다.

통로 위의 지점들과 상수 cc가 주어질 때, 반드시 덮여야 하는 모든 지점을 덮는 최소 비용을 구하세요.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 두 정수 nn과 cc가 주어집니다 (1≤n≤1,000,0001 \le n \le 1{,}000{,}000, 1≤c≤1091 \le c \le 10^9). 여기서 nn은 반드시 덮여야 하는 지점의 개수이고, cc는 시공업체의 상수입니다. 이어지는 nn개의 줄에는 각각 정수 하나가 주어지며, 이는 반드시 덮여야 하는 통로 위의 한 지점을 나타냅니다. 지점들은 작은 값부터 큰 값 순서로 주어집니다. 모든 지점은 11 이상 10910^9 이하입니다. 입력은 두 개의 00만 있는 줄(0 0)로 끝나며, 이는 입력의 끝을 뜻합니다.

출력

각 테스트 케이스마다 지정된 모든 지점을 덮는 최소 비용을 정수 하나로 출력합니다. 각 정수는 자기 줄에 공백 없이 출력하고, 답 사이에 빈 줄을 넣지 않습니다. 가능한 모든 입력에 대해 답은 부호 있는 64비트 정수 범위 안에 들어갑니다.

예제4

  1. 예제 1

    입력
    10 5000
    1
    23
    45
    67
    101
    124
    560
    789
    990
    1019
    0 0
    
    예상 출력
    30726
    
  2. 예제 2

    입력
    1 1
    5
    0 0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    2 10
    7
    7
    0 0
    
    예상 출력
    10
    
  4. 예제 4

    입력
    2 5
    1
    100
    0 0
    
    예상 출력
    10