백준 11052는 보기엔 뭐가 많은데 DP로 하자면 그렇지 않다. 예전에 이걸 DP가 아닌 걸로 도전해본 흔적이 남아있었는데 완전 개고생이다.
import sys
n = int(sys.stdin.readline()) # 구매하려고 하는 카드의 개수
price = [0] + list(map(int, sys.stdin.readline().split(' ')))
total = [0] * (n+1)
total[1] = price[1]
total[2] = max(price[2], total[1] + price[1])
for i in range(3, n+1):
temp = total[1] + total[i - 1]
for j in range(2, i//2 + 1):
temp = max(temp, total[j] + total[i-j])
total[i] = max(price[i], temp)
print(total[n])
'Algorithm' 카테고리의 다른 글
[DP] boj 9251 - 2차원 리스트 이용하기 (0) | 2021.01.13 |
---|---|
[그래프] boj 2667, 4963 - 사방팔방을 한 칸씩 탐색하기 (0) | 2021.01.09 |
[DP] boj 9465 - 2행 배열에서 점화식 구하기 (0) | 2021.01.06 |
[그래프] boj 2331 - 반복수열 (0) | 2021.01.04 |
[DP] boj 11057 - 오르막 수 (0) | 2021.01.03 |