본문으로 바로가기

[dp] 1912 연속합

category ps/다이나믹 프로그래밍 2021. 9. 25. 22:59

1912 연속합

 

풀이코드

#include <iostream>
#include <algorithm>

using namespace std;
// 1912 연연속연속합

const int MAX = 100000;

int n;
int A[MAX + 1];
int cache[MAX + 1];

int max(int a, int b){ return a > b ? a : b; }

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr); 
	cout.tie(nullptr); 
	
    cin >> n;
    
    for(int i = 1; i <= n; i++){
        cin >> A[i];
    }
    
    cache[1] = A[1];
    for(int i = 2; i <= n; i++){
        cache[i] = max(A[i], cache[i - 1] + A[i]);
    }
    
    int ans = -123456789;
    
    for(int i = 1; i <= n; i++){
        ans = max(ans, cache[i]);
    }
    cout << ans << '\n';

}

 

해설


적용한 레시피 / 방법론 + 접근법

0. 브루트 포스가 불가하다. 100,000 이 n 의 최대이기에 2^100,000... 불가능하다.

1. cache[i] : max(A[i], cache[i - 1] + A[i])

- cache : A[i] 로 끝나는 연속합의 최대를 저장한다.

풀이

아쉬웠던 부분 / 오답 원인 / 개선해야 할 점

이전에 풀었던 코드와 비교해보자.

 

반응형

'ps > 다이나믹 프로그래밍' 카테고리의 다른 글

[연속 dp] 1149 RGB 거리  (0) 2021.09.26
[dp] 15988 1,2,3 더하기 3  (0) 2021.09.26
[dp] LIS 4 14002  (0) 2021.09.25
[dp] 11053 LIS 가장 긴 증가하는 부분 수열  (0) 2021.09.25
1,2,3 더하기 5 (15990)  (0) 2021.09.24