만드는 중입니다

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

원기둥 밀어 모으기

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

요약
바닥에 고정된 순서로 놓인 최대 500개 원기둥을 양쪽에서 밀착시킬 때 벽 사이 최소 거리를 계산합니다.
난이도

보통10점 중 6점

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

문제

야적장 평평한 바닥에 무거운 금속 원기둥 여러 개가 놓여 있다. 길이는 모두 같고 지름은 서로 다를 수 있다. 원기둥의 두 밑면은 나란히 정렬되어 있고 축 방향도 모두 같다.

이 원기둥이 차지하는 면적을 최소로 줄이려 한다. 원기둥은 너무 무거워서 들어 올릴 수 없지만 굴리기는 어렵지 않으므로, 양쪽에서 높은 벽 두 개로 밀기로 했다.

원기둥을 끝까지 밀어 붙였을 때 두 벽 사이의 거리가 최소 얼마가 되는지 구하라. 원기둥끼리 서로 닿아도 되고 벽에 닿아도 된다. 원기둥을 바닥에서 들어 올릴 수는 없으므로 놓인 순서는 바꿀 수 없다.

그림 B.1. 두 벽 사이의 원기둥

입력

입력은 테스트 케이스 하나로 이루어진다.

첫째 줄에 원기둥의 개수 NN (1≤N≤5001 \le N \le 500)이 주어진다.

둘째 줄에 원기둥의 반지름 NN개가 한쪽 끝에서 반대쪽 끝까지 놓인 순서대로 주어진다. 반지름은 모두 11 이상 1000010000 이하의 정수다.

출력

원기둥을 끝까지 밀어 붙였을 때 두 벽 사이의 거리를 한 줄에 출력한다.

소수점 아래 일곱째 자리에서 반올림해 소수점 아래 여섯 자리까지 출력한다. 값이 정수여도 소수점 아래 여섯 자리를 모두 적는다. 예를 들어 거리가 4040이면 40.000000을 출력한다.

힌트

아래 세 그림은 차례로 첫 번째, 두 번째, 세 번째 예제에 해당한다.

그림 B.2. 첫 번째 예제그림 B.3. 두 번째 예제그림 B.4. 세 번째 예제

예제5

  1. 예제 1

    입력
    2
    10 10
    
    예상 출력
    40.000000
    
  2. 예제 2

    입력
    2
    4 12
    
    예상 출력
    29.856406
    
  3. 예제 3

    입력
    5
    1 10 1 10 1
    
    예상 출력
    40.000000
    
  4. 예제 4

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

    입력
    2
    5000 10000
    
    예상 출력
    29142.135624