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);
}
}