dp
문제
dp
문제는 처음 인덱스부터지만, 이 문제는 마지막 인덱스부터 생각해야 한다.i+t[i]
가 n
보다 크다면 범위를 넘으므로 dp[i+1
을 해준다. 이 값을 위해 dp
를 n+1
사이즈로 만들었고 dp[n]
을 0
으로 초기화해주었다.dp[i+t[i]]
)과 상담을 안하는 값 dp[i+1]
값을 비교해 큰 쪽으로 갱신해준다.dp
가 완성되면 dp[0]
에는 최댓값이 만들어져있을 것이다.#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void)
{
int n;
cin >> n;
vector<int> t(n);
vector<int> p(n);
for (int i = 0; i < n; i++)
{
cin >> t[i] >> p[i];
}
vector<int> dp(n+1);
dp[n] = 0;
for (int i = n - 1; i >= 0; i--)
{
if (i + t[i] > n) dp[i] = dp[i + 1];
else
{
dp[i] = max(dp[i + t[i]] + p[i], dp[i + 1]);
}
}
cout << dp[0];
return 0;
}