https://www.acmicpc.net/problem/11052
Code
n = int(input())
p = [0]
p += [int(x) for x in input().split()]
dp = [0] *(n+1)
dp[1] = p[1]
dp[2] = max(p[2], p[1]*2)
for i in range(3,n+1):
dp[i] = p[i]
for j in range(1, i//2 + 1):
if dp[i] < dp[j]+ dp[i-j]:
dp[i] = dp[j]+ dp[i-j]
print(dp[n])
참고
한정된 자원으로 뽑기해서 최댓값 만들기 문제.
dp[n] 에서 n은 사용한 자원.