2294λ²: λμ 2
첫째 μ€μ n, kκ° μ£Όμ΄μ§λ€. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) λ€μ nκ°μ μ€μλ κ°κ°μ λμ μ κ°μΉκ° μ£Όμ΄μ§λ€. λμ μ κ°μΉλ 100,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€. κ°μΉκ° κ°μ λμ μ΄ μ¬λ¬ λ² μ£Όμ΄
www.acmicpc.net
λ¬Έμ
nκ°μ§ μ’ λ₯μ λμ μ΄ μλ€. μ΄ λμ λ€μ μ λΉν μ¬μ©ν΄μ, κ·Έ κ°μΉμ ν©μ΄ kμμ΄ λλλ‘ νκ³ μΆλ€. κ·Έλ¬λ©΄μ λμ μ κ°μκ° μ΅μκ° λλλ‘ νλ €κ³ νλ€. κ°κ°μ λμ μ λͺ κ°λΌλ μ¬μ©ν μ μλ€.
μ¬μ©ν λμ μ ꡬμ±μ΄ κ°μλ°, μμλ§ λ€λ₯Έ κ²μ κ°μ κ²½μ°μ΄λ€.
μ λ ₯
첫째 μ€μ n, kκ° μ£Όμ΄μ§λ€. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) λ€μ nκ°μ μ€μλ κ°κ°μ λμ μ κ°μΉκ° μ£Όμ΄μ§λ€. λμ μ κ°μΉλ 100,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€. κ°μΉκ° κ°μ λμ μ΄ μ¬λ¬ λ² μ£Όμ΄μ§ μλ μλ€.
μΆλ ₯
첫째 μ€μ μ¬μ©ν λμ μ μ΅μ κ°μλ₯Ό μΆλ ₯νλ€. λΆκ°λ₯ν κ²½μ°μλ -1μ μΆλ ₯νλ€.

νμ΄κ³Όμ
λ¬Έμ μμ μꡬνλ μ¬νμ kλΌλ κ°μ λ§λ€κΈ°μν΄μ νμν λμ μ μ΅μκ°μλ₯Ό ꡬνλΌ λΌλ λ¬Έμ μμλ€.
λ¬Έμ μ μ νμμ²΄κ° μ μ νμλ λμ 1μ λΉν΄μλ λλ¦ μΉμνλ λ¬Έμ μμ΄μ μ½κ² μ κ·Όν μ μμλ κ±° κ°λ€.
λ¬Έμ μμ μꡬνλ kλ₯Ό λ§λ€κΈ° μν λμ μ μ΅μκ°μλ₯Ό ꡬνλ λ°©λ²μ
dp[k] = (dp[k - (λμ μ μ’ λ₯)] + 1) μ€ μ΅μ κ°μ΄μλ€.
dp[k - (λμ μ μ’ λ₯)]λΌλ κ°μ kλ³΄λ€ μμ κ°λ€μ ꡬνλ λμ μ μ΅μκ°μλ₯Ό ꡬν΄μ¨ κ³Όμ μ΄κ³ ,
dp[k - (λμ μ μ’ λ₯)]λ λ€μν λμ μ μ’ λ₯ μ€μμλ κ·Έ μ€μ κ°μ₯ μμ κ°μ΄ μμ κ²μ΄κΈ°λλ¬Έμ λΉκ΅λ₯Ό ν΄κ°λ©΄μ κ°μ₯ μμ dp[k]λΌλ κ°μ ꡬνλ λ°©μμΌλ‘ μ½λνμ΄λ₯Ό μ§ννμλ€.
code
#include <iostream>
int coin[101];
int dp[10001];
int main(void)
{
int n, k, temp;
std::cin >> n >> k;
for (int i = 0; i < n; i++) {
std::cin >> coin[i];
}
for (int i = 1; i <= k; i++) {
dp[i] = 10001;
for (int j = 0; j < n; j++) {
if (i == coin[j])
dp[i] = 1;
else if (0 < i - coin[j] && dp[i - coin[j]] + 1 < dp[i]) {
dp[i] = dp[i - coin[j]] + 1;
}
}
}
if (dp[k] == 10001) std::cout << "-1";
else std::cout << dp[k];
return (0);
}
νκΈ°
μΉμνλ μ νμ΄μμ΄μ μ νμμ κ·Όμ ν¬κ² μ€λ걸리μ§λ μμλ κ±° κ°λ€.
'Algorithm > λ¬Έμ νμ΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 1543λ² - λ¬Έμ κ²μ (JS) (1) | 2023.08.28 |
---|---|
[λ°±μ€] 2225λ² - ν©λΆν΄ (C++) (0) | 2023.08.27 |
[λ°±μ€] 2293λ² - λμ 1 (C++) (0) | 2023.08.26 |
[λ°±μ€] 1327λ² - μνΈ κ²μ (C++) (0) | 2023.08.24 |
[λ°±μ€] 14916λ² - κ±°μ€λ¦λ (C++) (0) | 2023.08.24 |