알고리즘

[백준/파이썬] #15486

룰루루 2025. 3. 20. 19:24

30분 타임어택을 하지는 못했지만, 대략적인 방법까지는 유추해냈다. 참고한 풀이와 비슷하게 DP 배열을 선언하고, 첫째 날부터 마지막 날까지의 각 날마다 얻을 수 있는 최대 상담료를 계산하면 되었다. 

import sys

input = sys.stdin.readline

N = int(input())
DP = [0] * (N+1)
time = [0] * (N+1)
price = [0] * (N+1)
for i in range(1, N+1):
    T, P = map(int, input().split())
    time[i] = T
    price[i] = P

for i in range(1, N+1):
    DP[i] = max(DP[i], DP[i-1])
    end_date = i + time[i] - 1
    if end_date <= N:
        DP[end_date] = max(DP[end_date], DP[i-1] + price[i])

print(DP[N])