원기둥 밀어 모으기

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

보통6동적 계획법기하아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

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

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

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

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

입력

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

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

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

출력

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

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

힌트

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

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