문제
풀이
n개의 카드를 갖기 위해 지불해야 하는 금액 DP[n]은 DP[n-k] + DP[k]으로 표현할 수 있다.
예를 들어 n=5이면 다음과 같다.
DP[5] = max(DP[5], DP[4] + DP[1], DP[3] + DP[2])
즉, 점화식은 그대로 DP[n] = DP[k] + DP[n-k]가 되며 이를 위해 DP[n]엔 모두 P[n]로 초기화했다.
코드
import sys
n = int(input())
p = [int(x) for x in sys.stdin.readline().split()]
p = [0] + p
dp = [0] * (n+1)
for i in range(1, n+1):
dp[i] = p[i]
for i in range(1, n+1):
for j in range(i-1, 0, -1):
if j < i - j:
break
if dp[j] + dp[i-j] > dp[i]:
dp[i] = dp[j] + dp[i-j]
print(dp[n])
'CS > 알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 6603 - 로또 [Python(파이썬)] (0) | 2021.01.07 |
---|---|
[백준] 14502 - 연구소 [Python(파이썬)] (0) | 2021.01.06 |
[백준] 10844 - 쉬운 계단 수 [Python(파이썬)] (3) | 2021.01.06 |
[백준] 1149 - RGB거리 [Python(파이썬)] (0) | 2021.01.06 |
[백준] 4948 - 베르트랑 공준 [Python(파이썬)] (0) | 2021.01.02 |