소스코드
N = int(input())
work = []
for i in range (N):
work.append(list(map(int, input().split())))
dp = [0] * (N+1)
for i in range(N):
for j in range(i+work[i][0],N+1):
if dp[j] < dp[i] + work[i][1]:
dp[j] = dp[i] + work[i][1]
print(dp[-1])
알고리즘
work = [[3, 10], [5, 20], [1, 10], [1, 20], [2, 15], [4, 40], [2, 200]]
i = 0 일때
j = 3~ N+1 까지 => 1일차에 3일을 일할 수 있으면 4일부터 일을 하는 것
if dp[j] < dp[i] + work[i][1]:
dp[j] = dp[i] + work[i][1]
- dp[3] 이 dp[0] + work[0][1] 보다 작으면 갱신
=> 그 날까지 얻었던 최대 이익 + 일한 이익을 갱신해 나가는 것
dp 값
[0, 0, 0, 10, 30, 30, 45, 45]
'Coding test' 카테고리의 다른 글
[프로그래머스/파이썬/구명보트] (0) | 2023.10.01 |
---|---|
[백준/1149/파이썬] RGB거리 (0) | 2023.06.06 |
[백준/11401/파이썬] (0) | 2023.06.03 |
[백준/2579/파이썬] 계단오르기 (0) | 2023.06.02 |
[백준/20125/파이썬] 쿠키의 신체측정 (0) | 2023.06.01 |