본문 바로가기

Algorithm

C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 1912번:연속합 답

반응형

//연속 합에서 가장 큰 수를 구할 때는 두 가지 경우로 나눌 수 있다

//1.자기 자신만 더했을 때 가장 큰 경우

//2.연속 된 두 수를 더했을 때 가장 큰 경우

//D[i] = i번째 수로 끝나는 가장 큰 연속 합

//K[] = 입력된 수

//D[i] = D[i-1] + K[i] 와 K[i]와 비교했을 때 가장 큰 것.  


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 <vector>
#include <algorithm>
using namespace std;
int main() {
    int n, big = 0;
    cin >> n;
    vector <int> D(n);
    vector <int> K(n);
    for (int i = 0; i < n; i++)
    {
        cin >> K[i];
    }
    for (int i = 0; i < n; i++)
    {
        D[i] = K[i];
        if (i == 0)
            continue;
        if (K[i] < D[i - 1+ K[i])
        {
            D[i] = D[i - 1+ K[i];
        }
    }
    big = D[0];
    for (int i = 1; i < n; i++)
    {
        if (big < D[i])
            big = D[i];
    }
    cout << big << '\n';
}
cs