본문 바로가기

알고리즘/문제풀이

연속부분최대합L

반응형

문제


N개의 정수가 주어질 때, 연속된 부분을 선택하여 합을 최대화 하는 프로그램을 작성하시오. 예를 들어, 아래와 같이 8개의 숫자가 있을 경우, 색칠된 부분을 선택했을 때 그 합이 가장 최대가 된다.

연속부분최대합

 

입력


첫 번째 줄에 n이 주어진다. ( 1 ≤ n ≤ 1,000,000 ) 두 번째 줄에 n개의 정수가 주어진다.  

출력


연속된 부분을 선택하였을 때의 최댓값을 출력한다.

 

예제 입력

8
2 3 -5 8 -3 4 2 -9

예제 출력

11

 

예제 입력

5
-1 -2 3 -2 4

예제 출력

5

 



연속부분최대합을 동적계획법으로 푸는 풀이다.


Table(i) 를 i번째 수를 오른쪽 끝으로 하는 연속부분 중 최대합이라고 정의한다.


그러면 Table에 대한 점화식은 Table(i) = max ( Table(i-1) + Data(i) , Data(i) ) 가 된다.


위의 예제로 Table 을 구해보면 2  5  0  8  5  9  11  2 이므로, 이 값들중 가장 최대값인 11이 정답이 된다.


그러면 연속부분최대합을 완전 탐색법에서는 O(n^2) 분할 정복법에서는 O(nlogn) 동적계획법에서는 O(n) 만에 구할 수 있다.



반응형

'알고리즘 > 문제풀이' 카테고리의 다른 글

[11724] 연결 요소의 개수  (0) 2019.03.11
[1260] DFS와 BFS  (0) 2019.03.11
연속부분최대합  (0) 2019.03.02
전염병  (0) 2019.02.22
  (0) 2019.02.19