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