• 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;    
}