https://www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

1912번 연속합 문제 역시 DP를 사용하는 문제입니다.

 

문제에서 주어진 예제를 사용하여 arr배열이 넣었습니다.

 

여기서 DP[i]는 arr[i]까지의 연속합의 최대값이라고 할 수 있습니다.

 

초기값은 역시 자기 자신으로 시작합니다.

 

두번째 부터 선택을 할 수 있습니다. 10-4 = 6 을 선택할것인지 또는 자기 자신인 -4를 선택할 것인지.

 

DP[i]는 연속합의 최대값이기 때문에 6을 선택하겠습니다.

 

3번째 역시도 6+3 = 9와 자기 자신 3을 선택해야하는데 최대값인 9를 선택해줍니다.

 

그렇게 쭉 칸을 채워나가다가 12를 만나면

 

 

위와같이 -14+12 = -2 보다 자기 자신인 12를 선택하는 경우도 나옵니다.

 

이렇게 표를 다 채우면 최대값은 21일때 33이 최대값이 됩니다. 

 

저희는 직전값 + 자기 자신의값과 자기 자신의값 중 최대값을 비교 했기 때문에 

DP[i]=max(DP[i-1]+arr[i],arr[i])라는 공식이 만들어지게 됩니다.

 

아래는 코드입니다.

 

 

 

 

'Programming > Baekjoon' 카테고리의 다른 글

BOJ ) 11053번 가장 긴 증가하는 부분 수열  (0) 2019.10.07
BOJ ) 10866번 덱  (0) 2019.06.25
BOJ ) 1158번 조세퍼스문제  (0) 2019.05.31
BOJ ) 10845_큐  (0) 2019.05.30
BOJ ) 1406 에디터  (0) 2019.05.25

+ Recent posts