리스트를 뒤에서부터 확인하면서 해당시간 i에서 t[i]만큼 시간이 흘렀을 때, 값이 n보다 작거나 같으면 dp 점화식에 따라 최고 이익을 갱신해주었다
소스 코드
n = int(input())
t = []
p = []
dp = [0] * (n + 1)
max_value = 0
for _ in range(n):
    x, y = map(int, input().split())
    t.append(x)
    p.append(y)
for i in range(n-1, -1, -1):
    time = t[i] + i
    if time <= n:
        dp[i] = max(max_value, dp[time] + p[i])
        max_value = dp[i]
    else:
        dp[i] = max_value
print(max_value)