알고리즘/백준

[백준 13398] 연속합 2 C++

겜도리도리 2021. 10. 7. 22:37
반응형

문제

백준 13398 연속합 2 C++

 

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
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
using namespace std;
 
int arr[100000];
int dp[100000][2];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
 
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    dp[0][0= arr[0];
    dp[0][1= arr[0];
    int ans = arr[0];
 
    // 점화식
    for (int i = 1; i < n; i++)
    {
        dp[i][0= max(arr[i], arr[i] + dp[i - 1][0]);
        dp[i][1= max(dp[i - 1][0], dp[i - 1][1+ arr[i]);
        ans = max(ans, max(dp[i][0], dp[i][1]));
    }
    cout << ans;
    return 0;
}
cs
반응형

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

[백준 1987] 알파벳 C++  (0) 2021.10.08
[백준 14719] 빗물 C++  (0) 2021.10.07
[백준 2660] 회장뽑기 C++  (0) 2021.10.05
[백준 5582] 공통 부분 문자열 C++  (0) 2021.10.03
[백준 13023] ABCDE C++  (0) 2021.10.02