백준/다이나믹 프로그래밍
# 14501 퇴사
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
백준 14501번. 퇴사 (Java, Python)
Problem 문제 링크 앞으로 남은 근무일과 상담일정이 주어졌을 때 상담으로 얻는 최대 수익을 구하는 문제입니다. Solution DP 문제입니다. for 문을 뒤에서부터 시작하여 dp 값을 차곡차곡 쌓아서
bcp0109.tistory.com
728x90
반응형