bright_code 2020. 9. 13. 18:32
728x90
반응형

기본 식 : dp[i] = MAX(P[i] + dp[i+T[i]], dp[i+1])

 

n = int(input())

t = [0 for _ in range(n)]
p = [0 for _ in range(n)]

for i in range(n):
  t[i],p[i] = map(int,input().split())


dp = [0 for _ in range(n)]
if t[n-1] == 1 : 
  dp[n-1] = p[n-1]


for i in range(n-2, -1, -1):
  day = i + t[i]

  if day == n : 
    # 더 이상의 상담은 없음. 
    dp[i]= max(p[i], dp[i+1])
  elif day < n : 
    dp[i] = max(p[i]+dp[day], dp[i+1])
  elif day > n : 
    dp[i] = dp[i+1]
  
print (max(dp))

 

 

# Reference 

https://bcp0109.tistory.com/8

 

백준 14501번. 퇴사 (Java, Python)

Problem 문제 링크 앞으로 남은 근무일과 상담일정이 주어졌을 때 상담으로 얻는 최대 수익을 구하는 문제입니다. Solution DP 문제입니다. for  문을 뒤에서부터 시작하여 dp  값을 차곡차곡 쌓아서

bcp0109.tistory.com

 

728x90
반응형