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

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

철로 놓기

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

요약
x좌표 순으로 정렬된 n개 도시를 수직이 아닌 직선들로 덮으면서, 각 도시에서 직선까지의 수직거리 제곱합과 직선 개수 곱하기 C의 합을 최소로 만든다.
난이도

어려움10점 중 8점

유형
동적 계획법, 기하, 수학, 그리디
정답자
아직 제출이 없습니다

문제

영구국은 여러 도시를 잇는 철로를 놓으려고 한다. 노선은 각 도시와 철로 사이의 거리가 가장 작아지도록 정하기로 했다. 자재를 알아보던 기술진은 이웃 나라 포에버국에서 만든 기성품 선로를 사 오는 편이 가장 낫다는 것을 알아냈다. 그런데 포에버국이 파는 기성품 선로는 직선뿐이다. 노선이 하나의 직선이 아니면 (아래 그림처럼) 기성품 선로를 여러 개 사야 한다. 길이가 서로 다른 선로를 사도 된다.

여러 직선 구간으로 이루어진 노선

포에버국에서 선로를 하나 들여올 때마다 간접비 CC가 붙는다. 그래서 a+bCa + bC가 최소가 되도록 노선을 설계해야 한다.

  • aa는 각 도시에서 철로로 내린 수직 선분의 길이를 제곱해서 모두 더한 값이다.
  • bb는 기성품 선로의 개수이다.

다음 조건도 함께 지켜야 한다.

  • 선로가 서로 이어져 있지 않아도 된다.
  • 어떤 선로도 수직으로 놓을 수 없다.
  • 어떤 수직선도 두 선로의 내부를 서로 다른 두 점에서 만나지 않는다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫째 줄에는 정수 nn과 실수 CC가 공백 하나로 구분되어 주어진다. 이어지는 nn개 줄에 도시의 좌표가 주어지며, ii번째 줄에는 ii번째 도시의 좌표 xix_i와 yiy_i가 정수로 주어진다.

제한

  • 1≤T≤2001 \le T \le 200
  • 1≤n≤10001 \le n \le 1000
  • −1000≤xi,yi≤1000-1000 \le x_i, y_i \le 1000
  • 0<C≤10000.0000 < C \le 10000.000
  • CC는 소수점 아래 셋째 자리까지 주어진다.
  • x1<x2<x3<⋯<xnx_1 < x_2 < x_3 < \cdots < x_n

출력

각 테스트 케이스마다 a+bCa + bC의 최솟값을 한 줄에 하나씩 출력한다. 소수점 아래 다섯째 자리에서 반올림해서 넷째 자리까지 출력하고, 뒤에 오는 0도 생략하지 않는다. 값이 11이면 1.0000으로 출력한다.

예제2

  1. 예제 1

    입력
    2
    10 1.0
    1 1
    2 2
    3 3
    4 4
    5 5
    6 6
    7 7
    8 8
    9 9
    10 10
    8 2.0
    1 1
    2 2
    3 1
    4 2
    5 1000
    6 999
    7 1000
    8 999
    
    예상 출력
    1.0000
    5.6000
    
  2. 예제 2

    입력
    2
    5 0.5
    0 0
    1 0
    2 0
    3 100
    4 100
    5 400.0
    0 0
    1 0
    2 0
    3 100
    4 100
    
    예상 출력
    1.0000
    800.0000