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

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

토지 분할 세금

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

요약
고리 모양으로 배치된 N개 구획을 하나씩 분할하되, 분할마다 생기는 두 조각 중 큰 조각의 넓이에 F를 곱한 세금을 낸다. 총 세금의 최솟값을 구한다.
난이도

보통10점 중 7점

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

문제

International Concrete Projects Company(ICPC)는 고급 주택 시장을 전문으로 하는 건설 회사입니다. ICPC는 호수 주변에 새 주택 단지를 계획하고 있습니다. 지어질 필지들은 크기가 서로 다르지만 모두 호숫가에 접해 있으며, 각 필지는 단지 안에서 정확히 두 개의 이웃(왼쪽 하나, 오른쪽 하나)을 가집니다. 따라서 필지들은 호수를 둘러싸는 하나의 고리(원형) 형태로 배치됩니다.

ICPC는 호수 주변의 토지를 소유하고 있으며, 이를 계획에 따라 여러 필지로 나누어야 합니다. 그런데 County Council(군 의회)은 작은 필지가 남발되는 것을 막기 위해 다음과 같은 토지세 규정을 두고 있습니다.

  1. 토지는 오직 일련의 '분할' 연산을 통해서만 나눌 수 있다.
  2. 한 번의 분할은 하나의 토지 조각을 두 개의 조각으로 나누는 연산이다.
  3. 분할을 할 때마다 세금을 내야 한다.

한 번의 분할로 생긴 두 조각 중 넓은 쪽의 넓이를 AA라 하면, 그 분할에 대한 세금은 A×FA \times F입니다. 여기서 FF는 County Council이 매년 정하는 분할 세금 계수입니다. 규정 (2) 때문에 하나의 조각을 NN개의 필지로 나누려면 N−1N - 1번의 분할이 필요하고, 따라서 N−1N - 1번 세금을 내야 합니다.

예를 들어 계수가 2.52.5이고, 호수를 따라 순서대로 놓인 필지들의 넓이가 300,100,500,100,100,200300, 100, 500, 100, 100, 200이라고 합시다. 첫 분할에서 넓이 500500인 필지를 나머지 전부에서 떼어내면, 넓은 쪽의 넓이가 800800이므로 세금은 2.5×(300+200+100+100+100)2.5 \times (300 + 200 + 100 + 100 + 100)입니다. 이어서 넓이 300300인 필지를 그 이웃인 넓이 100100짜리 필지와 함께 나머지에서 떼어내면 추가로 2.5×(300+100)2.5 \times (300 + 100)을 냅니다. 이런 식으로 계속됩니다. 규정 (2) 때문에 불가능한 분할도 있습니다. 위 첫 분할 이후에는 넓이 300300인 필지와 넓이 200200인 필지를 나머지 세 필지에서 한 번에 떼어낼 수 없는데, 그렇게 하면 조각이 두 개보다 많아지기 때문입니다.

호수 주변 모든 필지의 넓이와 현재의 분할 세금 계수가 주어질 때, 계획대로 토지를 나누는 데 필요한 최소 총 분할 세금을 구하는 프로그램을 작성하세요.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 필지의 수를 나타내는 정수 NN과 분할 세금 계수를 나타내는 실수 FF가 주어집니다(1≤N≤2001 \le N \le 200이고, FF는 소수점 이하 두 자리로 주어지며 0<F≤5.000 < F \le 5.00). 둘째 줄에는 계획상 이웃한 필지들의 넓이를 나타내는 NN개의 정수 XiX_i가 주어집니다(1≤i≤N1 \le i \le N에 대해 0<Xi≤5000 < X_i \le 500). 필지 XkX_k는 1≤k≤N−11 \le k \le N - 1에 대해 Xk+1X_{k+1}과 이웃하고, XNX_N은 X1X_1과 이웃합니다(즉 필지들은 원형으로 배치됩니다). 입력의 끝은 N=F=0N = F = 0인 줄로 표시됩니다.

출력

각 테스트 케이스마다 한 줄에 최소 총 분할 세금을 소수점 이하 두 자리의 실수로 출력하세요.

예제6

  1. 예제 1

    입력
    4 1.50
    2 1 4 1
    6 2.50
    300 100 500 100 100 200
    0 0
    
    예상 출력
    13.50
    4500.00
    
  2. 예제 2

    입력
    1 5.00
    500
    0 0
    
    예상 출력
    0.00
    
  3. 예제 3

    입력
    2 3.00
    10 20
    0 0
    
    예상 출력
    60.00
    
  4. 예제 4

    입력
    3 2.00
    5 5 5
    0 0
    
    예상 출력
    30.00
    
  5. 예제 5

    입력
    5 1.00
    1 100 1 100 1
    0 0
    
    예상 출력
    303.00
    
  6. 예제 6

    입력
    4 0.01
    100 100 100 100
    0 0
    
    예상 출력
    4.00