why? 반복되어 사용되는 게 있어 DP 문제라 생각했고, DP에서 최대는 누적이니까 당연히 앞에서부터 누적된다고 생각함.
but, 문제는 앞에서부터 했을 때 어디까지 가능한지 체크해야되고 이에 DP를 사용하는 게 어려움 -> 뒤에서 하도록 생각을 바꿔야 했음
#include <iostream>
#include <algorithm>
using namespace std;
int t[17];
int p[17];
int d[17];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i=1; i<=n; i++) cin >> t[i] >> p[i];
for (int i=n; i>=1; i--){
if (i + t[i] <= n+1) { // 선택 가능
// 선택했을 경우, 선택 안했을 경우
d[i] = max(p[i] + d[i+t[i]], d[i+1]);
} else { // 선택 불가능
d[i] = d[i+1];
}
}
cout << *max_element(d+1, d+n+1);
return 0;
}