이번 문제는 다이나믹 프로그래밍으로 해결하였다. 우선 카드 i개를 구매하는 최소 비용을 구해보면 cards[1]+dp[i-1], cards[2]+dp[i-2], cards[3]+dp[i-3], ... , cards[i]+dp[0]이 된다. 그러므로 점화식은 dp[i]=cards[j]+dp[i-j]가 된다. 이 중에서 최솟값으로 계속 갱신하면 dp[i]에 i개를 구매하는 최소 비용이 저장되게 된다.
n=int(input())
cards=[0]+list(map(int, input().split()))
dp=[False]*(n+1)
for i in range(1,n+1):
for j in range(1, i+1):
if dp[i]==False:
dp[i]=dp[i-j]+cards[j]
else:
dp[i]=min(dp[i], dp[i-j]+cards[j])
print(dp[n])