https://www.acmicpc.net/problem/16194
'11052 카드 구매하기'와 사실상 같은 문제다. 이전 문제에서는 최댓값을 구하는게 목표라면, 이번 문제는 최솟값을 구해야한다. 따라서 max함수를 min함수로 바꾸는 방식으로 해결할 수 있다.
# Initial
N = int(input())
P = list(map(int, input().split()))
P.insert(0, 0)
dp = [0 for _ in range(N+1)]
answer = 0
# P[n] = 카드 n개가 포함된 카드팩의 가격
# Make DP table
dp[1] = P[1]
for i in range(1, N+1):
temp = float("inf")
for j in range(1, i):
temp = min(temp, dp[i-j] + P[j])
dp[i] = min(temp, P[i])
# Answer
answer = dp[N]
print(answer)