algorithm

DP - ์•„์ดํ…œ์„ ์ ์ ˆํžˆ ๊ณ ๋ฅด๋Š” ๋ฌธ์ œ

rkawk 2025. 3. 21. 00:49

 

์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•œ ๋™์ „์˜ ์ด ๊ธˆ์•ก์ด ๊ฐ™๋‹ค๋ฉด -> ๋™์ „์ด ์ ์„์ˆ˜๋ก / ๋งŽ์„์ˆ˜๋ก ๋” ์ข‹๋‹ค.

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