https://www.acmicpc.net/problem/11052
i
개의 카드를 구매했을 때 최대 가격dp[i]
= i
개의 카드를 구매할 때 최대 가격dp[i-k]
= 최적의 방법으로 구매한 가격P[k]
= k
개의 카드를 구매하기 위한 가격dp[i] = Math.max(dp[i], dp[i-k] + P[k])
dp[i-k] + P[k]
를 계산하고, 모든 k
에 대한 조합의 최대 값을 찾는다.const run = (inputs: string[]) => {
const [num, string] = inputs;
const totalQuantity = Number(num);
const numbers = string.split(' ').map(Number);
// 키드 개수에 따른 최댓값 저장
const dp = new Array(totalQuantity + 1).fill(0);
for (let i = 1; i <= totalQuantity; i++) {
for (let k = 1; k <= i; k++) {
// i개 샀을 때의 최댓값 계산
dp[i] = Math.max(dp[i], dp[i - k] + numbers[k - 1]);
}
}
return dp[totalQuantity];
};