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
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 1010 다리 놓기  (0) 2020.09.13
# 11052 카드 구매하기 -  (0) 2020.09.13
# 9461 파도반 수열  (0) 2020.09.12
# 11727 타일링 2  (0) 2020.09.12
# 10844 쉬운 계단 수  (0) 2020.09.11

+ Recent posts