울타리

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

요약
길이가 주어진 최대 16개의 울타리를 서로 겹치지 않는 세 개씩의 묶음으로 나누고, 삼각형이 되는 묶음만 남겨 넓이 합의 최댓값을 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 비트 연산, 완전 탐색, 기하
정답자
아직 제출이 없습니다

문제

넓은 초원에 길이가 정해진 울타리 N개가 있다. 서로 다른 울타리 3개를 고르면 삼각형 모양의 울타리 하나를 만들 수 있으며, 삼각형의 각 변은 울타리 하나가 된다. 울타리는 서로 붙이거나 자를 수 없고, 한 번 사용한 울타리는 다른 삼각형에 다시 사용할 수 없다.

만들 수 있는 삼각형들을 적절히 골라, 그 넓이의 합을 최대로 하려고 한다. 가능한 넓이 합의 최댓값을 구하라.

입력

첫째 줄에 울타리의 개수 N이 주어진다. N은 16 이하의 자연수이다.

둘째 줄에는 각 울타리의 길이가 주어진다. 각 길이는 100 이하의 자연수이다.

출력

첫째 줄에 만들 수 있는 삼각형 넓이 합의 최댓값을 출력한다. 절대 오차 또는 상대 오차는 10^-9까지 허용된다.

힌트

A≤B≤CA \le B \le C인 세 길이 AA, BB, CC는 A+B>CA+B>C일 때만 삼각형을 만들 수 있다. 이때 넓이는 p(p−A)(p−B)(p−C)\sqrt{p(p-A)(p-B)(p-C)}이고, 여기서 p=(A+B+C)/2p=(A+B+C)/2이다.

예제4

  1. 예제 1

    입력
    7
    3 4 5 6 7 8 9
    
    예상 출력
    36.754383146489694
    
  2. 예제 2

    입력
    4
    1 2 4 8
    
    예상 출력
    0.0
    
  3. 예제 3

    입력
    4
    7 4 4 4
    
    예상 출력
    6.928203230275509
    
  4. 예제 4

    입력
    16
    21 72 15 55 16 44 54 63 69 35 75 69 76 70 50 81
    
    예상 출력
    7512.322360676162