[λ°±μ€(BOJ)] λμ 2(2294) C++
λ¬Έμ : BOJ_2294λ² λμ 2
λ¬Έμ μ€λͺ
DP
DPλ‘ ν μ μλ κΈ°λ³Έλ¬Έμ λμ 2
μ
λλ€.
n κ°μ λμ μ΄ μ£Όμ΄μ§κ³ , λμ λ§λ€ κ°μ΄ μ£Όμ΄μ§λλ€.
μ΄λ λμ λ€μ μ‘°ν©ν΄μ μ£Όμ΄μ§ kμ κ°μ μ΅μνμ λμ μ μ¨μ λ§μΆ°μΌ ν©λλ€.
Solution
ν° λμ μ΄ νμ μμ λμ μ λ°°μμμ΄ λ³΄μ₯λλ€λ©΄ κ·Έλ¦¬λ€ νκ² ν μ μμ§λ§,
μ λ¬Έμ λ λμ λΌλ¦¬ μλ‘ λ°°μκ° μλ κ° λ€μ΄κΈ° λλ¬Έμ dpλ₯Ό μ΄μ©ν΄ κ²½μ°μ μλ₯Ό λ€ λ΄μ€μΌ ν©λλ€.
1μ ~ k μμ νμΈνλ for λ¬Έμμ 1 ~ n λ²μ§Έ λμ μ μ΄μ©νλ for λ¬ΈμΌλ‘ 2μ€ for λ¬Έμ΄ νμν©λλ€.
kλ μ΅λ 10,000μ΄κ³ nμ μ΅λ 100μ΄λ―λ‘ μ΅λ for λ¬Έμ΄ 1,000,000μ
λλ€.
λμ μ νμΈν λ, νμΈν΄μΌ νλ λμ μ κ°κ³Ό μ΅μνμ μλ₯Ό νμΈν΄μΌ νλ κ°μ΄ κ°λ€λ©΄ dp[κ°] = 1
λ‘ μ μΈν©λλ€.
λμ μ κ°μ΄ μ΅μνμ μλ₯Ό νμΈν΄μΌ νλ κ°λ³΄λ€ ν¬λ€λ©΄ μ΄μ©ν μ μμΌλ―λ‘ λμ΄κ°λλ€.
λμ μ κ°μ΄ μ΅μνμ μλ₯Ό νμΈν΄μΌ νλ κ°λ³΄λ€ μλ€λ©΄
dp[κ°] = min(dp[κ°], (dp[κ° - λμ μ κ°] + dp[λμ μ κ°]));
μΌλ‘ ν΄λΉ κ°μ μ΅μκ°μ κ³μ κ°±μ ν΄ μ€λλ€.
Description
- μ΅μκ°μ κ°±μ νκΈ° μ λͺ¨λ INF κ°μΌλ‘ dp κ°μ μ΄κΈ°νν΄μ€λλ€.
- λͺ¨λ for λ¬Έμ λ€ λμλλ°λ INF κ°κ³Ό dp κ°μ΄ κ°λ€λ©΄ λμ μΌλ‘ λ§λ€ μ μλ κ°μ λλ€.
- kκ° μ΅λ 10,000μ΄λ―λ‘, 10,001μ
INF
λ‘ μ νμ΅λλ€.
#include <iostream>
#include <vector>
#include <algorithm>
#define INF 100001
using namespace std;
vector<int> coinValue;
vector<int> dp;
int main(void) {
int n, k;
cin >> n >> k;
dp.resize(k + 1);
for (int i = 0; i < n; i++) {
int num;
cin >> num;
coinValue.push_back(num);
}
for (int i = 1; i <= k; i++) dp[i] = INF;
for (int i = 1; i <= k; i++) {
for (int j = 0; j < n; j++) {
if (coinValue[j] == i) dp[i] = 1;
else if (coinValue[j] < i) {
dp[i] = min(dp[i], (dp[i - coinValue[j]] + dp[coinValue[j]]));
}
}
}
if (dp[k] == INF) cout << -1 << '\n';
else cout << dp[k] << '\n';
return 0;
}
'Algorithm > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] μ€λ₯΄λ§ μ(11057) (0) | 2022.03.09 |
---|---|
[BOJ] μ κ³±μμ ν©(1699) (0) | 2022.03.09 |
[BOJ] 2xn νμΌλ§(11726) (0) | 2022.03.09 |
[BOJ] μ©λ λΆμ‘±(5446) (0) | 2022.03.08 |
[BOJ] 보μ μμ(2792) (0) | 2022.03.07 |