문제1759--카드를 합쳐라

1759: 카드를 합쳐라

[만든사람 : ]
시간제한 : 1.000 sec  메모리제한 : 128 MB  제출 : 9  맞은 사람 : 1

제출  

문제 설명

코딩이는 카드를 N개 가지고 있다. 카드들에는 각각 숫자가 적혀있다. 숫자는 -1,000이상 1,000이하의 정수이다. 이 카드들에 적혀 있는 숫자들의 합을 구하려고 한다. 
하지만 카드들의 합을 그냥 더하는 것이 아니고 각각 다른 카드 두장을 합칠수가 있다. 카드 두장이 합쳐지면 각 카드에 적힌 숫자들은 곱해져서 하나의 카드로 만들어 진다. 
예를 들어, 카드가 6장이고 숫자가 0, 1, 2, 8, 3, 5 일때, 이 카드의 숫자들의 합을 그냥 구한다면 0+1+2+8+3+5 = 19이다. 
이 때, 0과 1을 합치고, 2와 8을 합치고, 3과 5를 합치면 (0*1)+(2*8)+(3*5) = 31이 되어 더 큰 값이 나오게 된다.
하지만 2와 3을 합치고, 5와 8을 합치면 0+1+(2*3)+(5*8) = 47이 되어 가장 큰 값이 나오게 된다.
모든 카드들은 단 한번만 합쳐지거나, 아니면 합쳐지지 않아야 한다.
카드들이 주어지고 각 카드들을 적절히 합쳐지게 했을때, 그 합이 최대가 되게 하는 프로그램을 작성하시오.

입력 설명

첫째 줄에 카드의 갯수 N이 주어진다. N은 50보다 작은 자연수이다. 둘째 줄부터 N개의 줄에 카드에 적혀진 각 수가 주어진다. 적혀진 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

출력 설명

카드를 합이 최대가 나오게 합쳤을 때 합을 출력한다. 정답은 항상 2^31보다 작다.

입력 예시1 Copy

4
-1 2 1 3

출력 예시1 Copy

6

출처/분류