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