https://www.acmicpc.net/problem/14501
접근
처음에 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])
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 14503번: 로봇 청소기 (Python) (0) | 2022.02.19 |
---|---|
백준 14502번: 연구소 (Python) (0) | 2022.02.19 |
백준 14500번: 테트로미노 (Python) (0) | 2022.02.06 |
백준 3190번: 뱀 (Python) (0) | 2022.02.04 |
백준 12100번: 2048 (Easy) (Python) (0) | 2022.02.03 |
최근댓글