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

 

14501번: 퇴사

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

www.acmicpc.net

접근

처음에 dp 문제임을 알아채는데 오래걸린 것을 제외하고는 푸는데는 크게 어렵지는 않은 문제였다.

맨 뒤에서부터 dp 계산을 진행하게 되며, dp[i] 에 dp[i + 1] 과 P[i] + dp[i + T[i]] 중에 큰 값을 계산해주고
마지막으로 dp[0]에 저장되는 값이 가능한 가장 큰 값이 된다.

코드

N = int(input())
T = []
P = []
dp = []
for _ in range(N):
    t, p = map(int, input().split())
    T.append(t)
    P.append(p)
    dp.append(p)
dp.append(0)
for i in range(N - 1, -1, -1):
    if T[i] + i > N:
        dp[i] = dp[i + 1]
    else:
        dp[i] = max(dp[i + 1], P[i] + dp[i + T[i]])
print(dp[0])

더 생각해 볼 것?

...

코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기