코딩고치

[백준][DP] 연속합 본문

백준 알고리즘 기초/다이내믹 프로그래밍

[백준][DP] 연속합

코딩고치 2019. 11. 6. 03:23

1. 문제 주소

 

1912번: 연속합

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

www.acmicpc.net

2. 문제

연속된 숫자들의 합 중에서 가장 큰 합을 구하는 문제이다. 숫자를 더해나가다가 음수를 만났을 때 이전의 연속합에 더할지 아니면 버리고 새로 시작할지를 생각하면 쉽게 풀 수 있는 문제이다.

3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    vector<int> sum(n);
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    for (int i = 0; i < n; i++) {
        sum[i] = arr[i];
        if (i == 0continue;
        sum[i] = max(sum[i - 1+ arr[i], sum[i]);
    }
    cout << *max_element(sum.begin(),sum.end());
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 
Comments