πŸ•οΈ PS (BOJ)/Dynamic Programming

[BOJ][C++] λ°±μ€€ 1912번: 연속합

선달 2023. 11. 3. 12:22
λ°˜μ‘ν˜•

https://www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 쀄에 μ •μˆ˜ n(1 ≤ n ≤ 100,000)이 μ£Όμ–΄μ§€κ³  λ‘˜μ§Έ μ€„μ—λŠ” n개의 μ •μˆ˜λ‘œ 이루어진 μˆ˜μ—΄μ΄ μ£Όμ–΄μ§„λ‹€. μˆ˜λŠ” -1,000보닀 ν¬κ±°λ‚˜ κ°™κ³ , 1,000보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€.

www.acmicpc.net

 

문제

n개의 μ •μˆ˜λ‘œ 이루어진 μž„μ˜μ˜ μˆ˜μ—΄μ΄ μ£Όμ–΄μ§„λ‹€. μš°λ¦¬λŠ” 이 쀑 μ—°μ†λœ λͺ‡ 개의 수λ₯Ό μ„ νƒν•΄μ„œ ꡬ할 수 μžˆλŠ” ν•© 쀑 κ°€μž₯ 큰 합을 κ΅¬ν•˜λ €κ³  ν•œλ‹€. 단, μˆ˜λŠ” ν•œ 개 이상 선택해야 ν•œλ‹€.

예λ₯Ό λ“€μ–΄μ„œ 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 μ΄λΌλŠ” μˆ˜μ—΄μ΄ μ£Όμ–΄μ‘Œλ‹€κ³  ν•˜μž. μ—¬κΈ°μ„œ 정닡은 12+21인 33이 정닡이 λœλ‹€.

μž…λ ₯

첫째 쀄에 μ •μˆ˜ n(1 ≤ n ≤ 100,000)이 μ£Όμ–΄μ§€κ³  λ‘˜μ§Έ μ€„μ—λŠ” n개의 μ •μˆ˜λ‘œ 이루어진 μˆ˜μ—΄μ΄ μ£Όμ–΄μ§„λ‹€. μˆ˜λŠ” -1,000보닀 ν¬κ±°λ‚˜ κ°™κ³ , 1,000보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 닡을 좜λ ₯ν•œλ‹€.

 

풀이

DPλ₯Ό μ΄μš©ν•˜μž

v[i] = i번째 숫자λ₯Ό ν¬ν•¨ν•œ μ΅œλŒ€ 연속 ν•©

 

벑터λ₯Ό λ”°λ‘œ λ§Œλ“€μ–΄λ„ λ˜μ§€λ§Œ λ‚˜λŠ” 인풋에 μ‚¬μš©ν•œ 벑터λ₯Ό μž¬μ‚¬μš©ν–ˆλ‹€

(직전에 생각없이 μ΄μ€‘λ°°μ—΄λ‘œ dpν–ˆλ‹€κ°€ λ©”λͺ¨λ¦¬μ΄ˆκ³Ό 당함)

 

// 풀이 : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> v(n);
    for(int i=0; i<n; i++) {
        cin >> v[i];
    }
    
    for(int i=1; i<n; i++) {
        v[i] = max(v[i-1]+v[i], v[i]);
    }
    
    cout << *max_element(v.begin(), v.end());
    
    return 0;  
}
λ°˜μ‘ν˜•