๐งถ ํ์ด
- dp[i]๋ i๋ช ์ผ ๋ ์ต์๋น์ฉ
- ๊ฐ ๋์๋ง๋ค dp ๊ฐ์ ์ ๋ฐ์ดํธ ํ๋ค.
-dp[people(์ป์ ์ ์๋ ๊ณ ๊ฐ์ ์)] > ํ๋ณด๋น์ฉ ์ด๋ฉด dp๊ฐ ์ ๋ฐ์ดํธ
-dp[1] ๋ถํฐ dp[C]๊น์ง dp ์ธ๋ฑ์ค๊ฐ people ๋ณด๋ค ์๋ค๋ฉด dp[i], ํ๋ณด๋น์ฉ์ค ์์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ, ์๋๋ผ๋ฉด dp[i], dp[people] + dp[i - people]๋ก ์ ๋ฐ์ดํธ ํ๋ฉฐ dp[C]๊ฐ์ ๊ตฌํด์ค๋ค.
์ฝ๋
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim()
.split("\n")
.map((el) => el.split(" ").map(Number));
const [C, N] = input.shift();
const dp = new Array(C + 1).fill(Infinity);
dp[0] = 0;
for (let [cost, people] of input) {
if (dp[people] > cost) dp[people] = cost;
for (let i = 1; i <= C; i++) {
dp[i] =
i < people
? Math.min(dp[i], cost)
: Math.min(dp[i], dp[people] + dp[i - people]);
}
}
console.log(dp[C]);
๐จ ์ฐธ๊ณ ์ฝ๋