숫자 조각 결속


문제 정보
check포인트 : 1 (부분 점수)
schedule시간 제한 : 2.0s
storage메모리 제한 : 128M
edit_square출제자:
 
답안 제출

N개의 숫자 조각이 놓여 있다. 최종 점수는 모든 조각의 값을 더해서 계산하지만, 계산하기 전에 서로 다른 두 조각을 하나의 결속으로 묶을 수 있다.

조각의 위치와 상관없이 묶을 수 있으나, 같은 조각을 자기 자신과 묶는 것은 불가능하다.

묶인 두 조각은 더하는 대신 두 값을 곱한 결과를 점수에 더한다.

예를 들면, 어떤 조각들이 {-2, -1, 0, 1, 3, 4}일 때, 그냥 모두 더하면 6이다.

하지만 -2와 -1을 묶고, 3과 4를 묶으면 \(0+1+(-2*-1)+(3*4) = 15\)가 되어 더 큰 점수를 만들 수 있다.

각 조각은 한 번만 묶거나, 아니면 묶지 않아야 한다.

숫자 조각들이 주어졌을 때, 적절히 묶어서 만들 수 있는 최댓값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 숫자 조각의 개수 N이 주어진다.

N은 50보다 작은 자연수이다.

둘째 줄부터 N개의 줄에 각 숫자 조각의 값이 주어진다.

숫자 조각의 값은 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

출력

숫자 조각들을 묶어서 얻을 수 있는 합의 최댓값을 출력한다.

정답은 항상 231보다 작다.

예제 입력 1

4
-1
2
1
3

예제 출력 1

6

예제 입력 2

6
0
1
2
4
3
5

예제 출력 2

27

예제 입력 3

1
-1

예제 출력 3

-1

예제 입력 4

3
-1
0
1

예제 출력 4

1

예제 입력 5

2
1
1

예제 출력 5

2

댓글

현재 작성된 댓글이 없습니다.