이번 문제는 다이나믹 프로그래밍을 통해 해결하였다. 메모라이제이션을 위한 dp배열을 만들고 점화식을 구하였다. 점화식을 구해보면 dp[i+t[i]]=dp[i]+p[i]
, dp[i]=dp[i-1]
이렇게 두가지로 나타난다. 이 두가지 방법을 통해 더 큰 값을 dp[i]로 취하면 문제를 해결할 수 있다. 계속해서 시간초과가 발생하여서 질문란을 보니 이 문제의 경우 입력이 너무 많아 입력 시 그냥 input을 사용하면 시간초과가 발생하는 것으로 보였다. 그래서 sys.stdin.readline()을 통해 입력하였다.
import sys
n=int(sys.stdin.readline().rstrip())
t=[0]
p=[0]
dp=[0]*(n+2)
for _ in range(n):
a, b=map(int, sys.stdin.readline().split())
t.append(a)
p.append(b)
for i in range(1, n+1):
dp[i]=max(dp[i-1], dp[i])
if i+t[i]<=n+1:
dp[i+t[i]]=max(dp[i+t[i]], dp[i]+p[i])
print(max(dp))