유산

시간 제한0.3초메모리 제한64 MB

요약
다각형 선 아래 영역을 주어진 비율에 맞는 넓이의 조각으로 나누되, 수직 울타리 길이의 합이 최소가 되도록 자르는 위치를 정한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 기하, 이분 탐색, 누적 합
정답자
아직 제출이 없습니다

문제

D 백작은 자신이 가진 땅을 nn명의 아들에게 물려주려고 한다.

이 땅은 OxOx 축 위쪽에 있다. 아래쪽 경계는 OxOx 축 위의 수평 선분 [AB][AB]이고, 왼쪽과 오른쪽 경계는 각각 수직 선분 [AP1][AP_1]과 [BPm][BP_m]이며, 위쪽 경계는 완전히 OxOx 축 위쪽에 놓인 꺾은선 P1P2…PmP_1P_2\dots P_m이다.

백작은 n−1n-1개의 수직 울타리를 세운다. 각 울타리는 바닥 선분 [AB][AB]와 꺾은선을 잇는다. 따라서 xx 좌표에 세운 울타리의 길이는 그 지점에서 꺾은선의 높이와 같다. 이 울타리들은 땅을 왼쪽에서 오른쪽으로 nn개의 구역으로 나눈다.

이 분할은 다음 두 조건을 모두 만족해야 한다.

  1. 각 아들에게 구역을 하나씩 배정할 때, 아들이 받는 구역의 넓이가 그 아들의 나이에 정비례하도록 배정할 수 있어야 한다.
  2. 위 조건을 만족하는 모든 분할 중에서, 울타리들의 길이 합이 최소가 되어야 한다.

mm개의 점 P1,…,PmP_1, \dots, P_m의 좌표와 nn명의 아들의 나이가 주어질 때, 가능한 울타리 길이 합의 최솟값을 구하라.

입력

첫째 줄에 두 정수 nn과 mm이 주어진다.

둘째 줄에 nn개의 정수 v1,v2,…,vnv_1, v_2, \dots, v_n이 주어지며, 이는 각 아들의 나이이다.

이어지는 mm개의 줄에는 각각 두 정수 xix_i와 yiy_i가 주어지며, 이는 점 PiP_i의 좌표이다.

출력

울타리 n−1n-1개의 길이 합의 최솟값을 소수점 아래 여섯째 자리까지 반올림하여 실수 하나로 출력한다.

제한

  • 1≤n≤81 \le n \le 8
  • 1≤m≤5001 \le m \le 500
  • 1≤vi≤501 \le v_i \le 50
  • 0≤x1<x2<⋯<xm≤320000 \le x_1 < x_2 < \dots < x_m \le 32000
  • 1≤y1,y2,…,ym≤320001 \le y_1, y_2, \dots, y_m \le 32000
  • 울타리의 두께는 무시한다.
  • 계산에는 배정밀도(double) 부동소수점을 사용하는 것을 권장한다.

힌트

예시(첫 번째 예제, n=2n = 2)에서는 울타리가 하나만 필요하다.

울타리를 x=10x = 10에 세우면 그 지점에서 꺾은선의 높이가 11이므로 전체 울타리 길이는 1.0000001.000000이다. 나이가 44인 아들은 왼쪽 구역(넓이 1616)을, 나이가 22인 아들은 오른쪽 구역(넓이 88)을 받으며, 두 구역의 넓이는 나이에 정비례한다.

만약 울타리를 x≈6.54984x \approx 6.54984에 세우면(길이 ≈2.51661\approx 2.51661) 나이가 22인 아들이 왼쪽, 나이가 44인 아들이 오른쪽 구역을 받는다. 이 분할도 넓이 정비례 조건은 만족하지만 울타리가 더 길어서 최적이 아니다. 그 밖의 위치는 넓이 정비례 조건을 만족하지 못한다.

예제3

  1. 예제 1

    입력
    2 4
    4 2
    2 1
    8 3
    10 1
    14 3
    
    예상 출력
    1.000000
    
  2. 예제 2

    입력
    1 3
    7
    0 5
    6 2
    12 8
    
    예상 출력
    0.000000
    
  3. 예제 3

    입력
    2 2
    1 1
    0 4
    10 4
    
    예상 출력
    4.000000