반응형

www.acmicpc.net/problem/13398

 

13398번: 연속합 2

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

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <algorithm>
using namespace std;
int n, ans, arr[100001], dp[2][100001];
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n;
    for(int i=0;i<n;i++)
        cin >> arr[i];
    ans = dp[0][0= dp[1][0= arr[0];
    /*
        dp[0][i]: 원소 제거 안한 연속합
        dp[1][i]: 원소 제거 한 연속합
          1) i번째 제거 -> 1 ~ i-1 제거하면 안됨 (dp[0][i-1])
          2) i번째 포함 -> 1 ~ i-1 중 하나 제거해야 함 (arr[i] + dp[1][i-1])
    */
    for (int i = 1;i < n;i++) {
        dp[0][i] = arr[i] + max(0, dp[0][i-1]);
        dp[1][i] = max(dp[0][i-1], dp[1][i-1+ arr[i]);
        ans = max(ans, max(dp[0][i], dp[1][i]));
    }
    cout << ans;
}
cs
반응형

'백준 > DP' 카테고리의 다른 글

백준 1103  (0) 2021.07.08
백준 11054  (0) 2021.02.19
백준 2133 [복습 필수] (점화식)  (0) 2021.02.17
백준 11055  (0) 2021.02.17
백준 2225  (0) 2021.02.17

+ Recent posts