• toc {:toc}

문제 ν™•μΈν•˜κΈ°

풀이

처음 λ“€μ—ˆλ˜ 생각은 BFS/DFS λ₯Ό μ‚¬μš©ν•΄μ„œ ν’€μ΄ν•˜λŠ” κ²ƒμ΄μ—ˆλŠ”λ° 계속 잘 μ•ˆ ν’€λ €μ„œ λ‹€λ₯Έ 방식이 μžˆλŠ”μ§€λ₯Ό κ³„μ†ν•΄μ„œ 생각해봀닀. DP λ¬Έμ œλΌλŠ” 것을 μ•ŒκΈ΄ ν•˜λŠ”λ° μ–΄λ–»κ²Œ ν’€μ–΄μ•Όν• μ§€ λͺ¨λ₯΄κ² λŠ” λŠλ‚Œμ΄μ—ˆλ‹€.

그러던 쀑 i 일 이후 얻을 수 μžˆλŠ” λˆμ€ i 일 μ΄ν›„λ‘œ μ €μž₯ν•΄ 놓은 이후 ν•΄λ‹Ή 일에 λ„μ°©ν–ˆμ„ λ•Œ ν•©μΉ˜λ©΄ λ˜κ² λ‹€λŠ” 생각을 ν–ˆλ‹€. ν•΄λ‹Ή 일에 얻을 수 μžˆλŠ” μ΅œλŒ“κ°’μ„ κ³„μ†ν•΄μ„œ κ°±μ‹ ν•˜μ—¬ λ§ˆμ§€λ§‰ 날에 얻을 수 μžˆλŠ” μ΅œλŒ“κ°’μ„ μ‚°μΆœν•œλ‹€.

#include <bits/stdc++.h>
using namespace std;
#define X first
 
int N, T[20], P[20], res = 0;
int price[20] = {0,};
 
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
 
    int res = 0;
 
    cin >> N;
    for(int i=0; i<N; i++){
        cin >> T[i] >> P[i];
    }
 
    for(int i=0; i<=N; i++){
        price[i] = max(price[i], res);
        if(P[i]+price[i] > price[i+T[i]] && i+T[i]< N+1)
            price[i+T[i]] = P[i] + price[i];
        if(res < price[i]) res = price[i];
    }
 
    cout << res << '\n';
 
    return 0;    
}