728x90
https://www.acmicpc.net/problem/14501
14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
일이 끝나는 날부터 마지막 날 까지 모든 날을 채워가며 업데이트 해야하는 점이 냅색 알고리즘(배낭문제) 와 비슷했습니다. 이 점만 생각하면 쉽게 풀 수 있습니다.
def solution(N, data_list):
# DP
memo = [0 for _ in range(N+1)]
# 일의 번호, data_list 인덱스
for work in range(N):
# n 번째 시작한 일이 끝나는 날
end_day = work + data_list[work][0]
# 퇴사하기 전에 끝날 경우에만
if end_day < N+1:
# 끝나는 날 부터 퇴사하는 날까지 최댓값 갱신
for day in range(end_day, N+1):
memo[day] = max(memo[day], memo[work] + data_list[work][1])
return memo[-1]
N = int(input())
data_list = [list(map(int, input().split())) for _ in range(N)]
print(solution(N, data_list))
728x90
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 11047 <동전 0> Python (0) | 2023.11.07 |
---|---|
백준 10844 <쉬운 계단 수> Python (0) | 2023.11.05 |
백준 11053 <가장 긴 증가하는 부분 수열> Python (0) | 2023.11.04 |
백준 9461 <파도반 수열> Python (0) | 2023.11.04 |
백준 1912 <연속합> Python (0) | 2023.11.03 |