특공대

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

요약
병사들을 연속한 구간으로 나누고 각 구간의 합을 오목 이차식에 넣어 얻는 점수의 총합이 최대가 되도록 분할한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 분할 정복, 누적 합, 수학
정답자
아직 제출이 없습니다

문제

11번부터 nn번까지 번호가 붙은 nn명의 병사로 이루어진 군대를 이끄는 지휘관이 있다. 지휘관은 앞으로의 전투를 위해 nn명의 병사를 여러 개의 특공대로 나누려고 한다. 결속력과 사기를 높이기 위해, 각 특공대는 번호가 연속하는 병사들, 즉 {i,i+1,…,j}\{i, i+1, \dots, j\} 형태로 구성되어야 한다.

각 병사 ii의 전투력은 xix_i이다. 특공대 {i,i+1,…,j}\{i, i+1, \dots, j\}의 원래 전투력은 그 병사들의 전투력의 합, 즉 x=xi+xi+1+⋯+xjx = x_i + x_{i+1} + \dots + x_j였다.

그러나 여러 해에 걸친 영광스러운 승리 끝에, 특공대의 전투력을 다음과 같이 조정하기로 하였다. 특공대의 조정된 전투력 x′x'는 x′=ax2+bx+cx' = a x^2 + b x + c 로 계산한다. 여기서 aa, bb, cc는 알려진 계수이고 a<0a < 0이며, xx는 위에서 정의한 특공대의 원래 전투력이다.

여러분이 할 일은 모든 특공대의 조정된 전투력의 합이 최대가 되도록 병사들을 특공대로 나누는 것이다.

입력

입력은 세 줄로 이루어진다. 첫째 줄에는 병사의 수를 나타내는 양의 정수 nn이 주어진다. 둘째 줄에는 조정된 전투력 공식의 계수인 세 정수 aa, bb, cc가 주어진다. 셋째 줄에는 병사 1,2,…,n1, 2, \dots, n의 전투력을 나타내는 nn개의 정수 x1,x2,…,xnx_1, x_2, \dots, x_n이 공백으로 구분되어 주어진다.

n≤1000000n \le 1000000, −5≤a≤−1-5 \le a \le -1, ∣b∣≤10000000|b| \le 10000000, ∣c∣≤30000000|c| \le 30000000, 1≤xi≤1001 \le x_i \le 100.

출력

얻을 수 있는 최대의 조정된 전체 전투력을 정수 하나로 출력한다.

예제3

  1. 예제 1

    입력
    4
    -1 10 -20
    2 2 3 4
    
    예상 출력
    9
    
  2. 예제 2

    입력
    1
    -3 5 -7
    50
    
    예상 출력
    -7257
    
  3. 예제 3

    입력
    1
    -1 200 -1
    100
    
    예상 출력
    9999