Python으로 구현한 14501번 퇴사 문제 풀이입니다.
https://www.acmicpc.net/problem/14501
n = int(input()) # 전체 상담 개수
t = [] # 각 상담을 완료하는 데 걸리는 기간
p = [] # 각 상담을 완료했을 때 받을 수 있는 금액
dp = [0] * (n + 1) # 다이나믹 프로그래밍을 위한 1차원 dp 테이블 초기화
max_value = 0
for _ in range(n) :
x, y = map(int, input().split())
t.append(x)
p.append(y)
# 리스트를 뒤에서부터 거꾸로 확인
for i in range(n - 1, -1, -1) :
time = t[i] + i
# 상담이 기간 안에 끝나는 경우
if time <= n :
# 점화식에 맞게, 현재까지의 최고 이익 계산
dp[i] = max(p[i] + dp[time], max_value)
max_value = dp[i]
# 상담이 기간을 벗어나는 경우
else :
dp[i] = max_value
print(max_value)
'백준(Python) 풀이 > 다이나믹 프로그래밍' 카테고리의 다른 글
백준(Python) 2193번 이친수 풀이 (0) | 2022.02.28 |
---|---|
백준(Python) 11057번 오르막 수 풀이 (0) | 2022.02.25 |
백준(Python) 1932번 정수 삼각형 풀이 (0) | 2022.01.12 |
백준(Python) 13301번 타일 장식물 풀이 (0) | 2021.10.27 |
백준(Python) 9625번 BABBA 풀이 (0) | 2021.10.27 |