문제
https://www.acmicpc.net/problem/15486
풀이
퇴사날 얻을 수 있는 가장 큰 이익은 다이나믹 프로그래밍을 활용하여 각 날짜까지 얻을 수 있는 최대 이익을 구하면 된다.
각 날까지 얻을 수 있는 이익을 0으로 초기화 시킨 배열 dp를 생성한다.
첫 날부터 일정 상담 시간 이후에 얻을 수 있는 금액을 구한다.
상담 종료 일정에 맞춰 그날 얻을 수 있는 총 금액을 구한다.
상담 시작일 이전까지 얻을 수 있는 최대 이익에 현재 상담 이익을 더하여 업데이트 한다.
가장 큰 이익을 출력한다.
코드
N = int(input())
chart = [list(map(int, input().split())) for _ in range(N)]
dp = [0 for _ in range(N+1)]
cur_max = 0
for i in range(N):
cur_max = max(cur_max, dp[i])
if chart[i][0]+i+1 <= N+1:
dp[i+chart[i][0]] = max(dp[i+chart[i][0]], chart[i][1]+cur_max)
print(max(dp))
'Koala - 12기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/pypy3] 21610번 : 마법사 상어와 비바라기 (0) | 2023.09.21 |
---|---|
[백준/phthon3] 9251번: LCS (0) | 2023.09.18 |
[백준/Python] 1965번 : 상자넣기 (0) | 2023.09.17 |
[프로그래머스/Java] 이모티콘 할인행사 (0) | 2023.09.17 |
[백준/python3] 1463번 : 1로 만들기 (0) | 2023.09.17 |