개발/algorithm

[백준 14501번] 퇴사 -python

zzi_on2 2022. 1. 29. 19:32

문제 링크

https://www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

 

풀이

- 완전 탐색 공부하다가 dp 문제를 봐버려서 ... dp 다시 공부하러 감 

- 메모제이션 문제 

- 뒤에서부터 계산 

- 예제를 표로 계산해보면 아래와 같음. dp[0]에는 최댓값이 들어가 있음 

n = int(input())

t = []
p = []

for _ in range(n):
  a, b = map(int,input().split())
  t.append(a)
  p.append(b)

d = [0] * (n+1)

for i in range(n-1, -1 ,-1):
  # i번째에 일을 하는 게 n을 초과하면 일을 하지 않음 
  if t[i] + i > n:
      d[i] = d[i+1]
  # i번째에 일을 하는 것과 일을 안하는 것 중 최댓값 
  else:
    d[i] = max(d[i+1], p[i] + d[i +t[i]])

print(d[0])