반응형
15486번: 퇴사 2
첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000)
www.acmicpc.net
코드
import sys
n = int(input())
T = [0]*(n+2)
P = [0]*(n+2)
dp = [0]*(n+2)
for i in range(1,n+1):
T[i],P[i] = map(int,sys.stdin.readline().split())
for i in range(1,n+1):
if(i+T[i] <= n+1):
dp[i+T[i]] = max(dp[i+T[i]],dp[i]+P[i])
dp[i+1] = max(dp[i+1],dp[i])
print(max(dp))
설명
n+1일에 끝나는 상담은 할 수 있다.
만약 1일에 잡힌 상담을 한다면 dp[i+T[i]] 인 dp[4]의 값은 10이 된다. 이런 식으로 최댓값을 갱신해나가면 된다.
마지막에 dp[i+1] = max(dp[i+1], dp[i]) 를 해주는 이유는 다른 경로를 통해 오는 것보다 그 전날 상담을 하지 않고 다음날로 넘어오는 것의 금액이 더 큰 경우가 존재하기 때문이다.
반응형
'알고리즘 > dynamic programming' 카테고리의 다른 글
[백준][Python] 14501번 퇴사 (0) | 2022.05.23 |
---|---|
[백준][Python] 2748번 피보나치 수 2 (0) | 2022.05.20 |
[백준][Python] 1890번 점프 (0) | 2022.05.17 |
[백준][Python] 1912번 연속합 (0) | 2022.05.16 |
[백준][Python] 2407번 조합 (0) | 2022.05.13 |
댓글