์ง๊ธ๊น์ง ์ฌ์ฉํ ๋์ ์ ์ด ๊ธ์ก์ด ๊ฐ๋ค๋ฉด -> ๋์ ์ด ์ ์์๋ก / ๋ง์์๋ก ๋ ์ข๋ค.
dp[i] = ์ง๊ธ๊น์ง ์ ํํ ๋์ ์ ํฉ์ด i์ผ๋, ๊ฐ๋ฅํ ์ต๋ ๋์ ์ ๊ฐ์.
dp[i] = max/min ( 0<=j<N i >= coin[j] ) dp[i - coin[j]] + 1
for(int i=1; i<=M; i++) {
for(int j=0; j<N; j++) {
if(coin[j] > i || dp[i - coin[j]] == -1) continue;
if(dp[i] == -1) {
dp[i] = dp[i - coin[j]] + 1;
}else {
dp[i] = min(dp[i], dp[i - coin[j]] + 1);
}
}
}
dp[0] = 0์ด๊ณ , 0์ ๊ธฐ์ค์ผ๋ก coin ๋ฐฐ์ด์ ์ฒซ ์์๋ถํฐ ๋๊น์ง ํ์ํ๋ฉฐ dp ๋ฐฐ์ด์ ๊ฐฑ์ ํ๋ค.
-> ์์์ ๊ฐ์๊ฐ ๋ฌดํ, ์ค๋ณต๋๋ค๋ ๊ฐ์ .
์ค๋ณต ๋์ง ์๋ ์์๋ก ๊ตฌํ ์์๋ ์ต๋/์ต์ ํฉ์ ๊ตฌํ๋ ค๋ฉด
์์ ์๋ฃจ์ ์์ M์ ๊ฑฐ๊พธ๋ก ๊ฐ๊ฒ ํ๋ฉด ๋๋ค.
dp[0] = 0;
for(int i=0; i<n; i++) {
for(int j=m; j>=0; j--) {
if(j >= A[i])
dp[j] = min(dp[j], dp[j - A[i]] + 1);
}
}
'algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 12100 (์ผ์ฑ ๊ธฐ์ถ) (0) | 2025.03.28 |
---|---|
27. Remove Element (0) | 2025.03.21 |
935 div2 C. Manhattan Permutations (0) | 2024.08.07 |
๋ฐฑ์ค 2671 (0) | 2024.08.02 |
๋ฐฑ์ค 14848 (0) | 2024.08.02 |