-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Gold IV] Title: 동전 바꿔주기, Time: 60 ms, Memory: 4056 KB -BaekjoonHub
- Loading branch information
Showing
2 changed files
with
77 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# [Gold IV] 동전 바꿔주기 - 2624 | ||
|
||
[문제 링크](https://www.acmicpc.net/problem/2624) | ||
|
||
### 성능 요약 | ||
|
||
메모리: 4056 KB, 시간: 60 ms | ||
|
||
### 분류 | ||
|
||
다이나믹 프로그래밍 | ||
|
||
### 제출 일자 | ||
|
||
2024년 3월 21일 18:10:12 | ||
|
||
### 문제 설명 | ||
|
||
<p>명보네 동네 가게의 현금 출납기에는 k 가지 동전이 각각 n<sub>1</sub>, n<sub>2</sub>, … , n<sub>k</sub>개 씩 들어있다. 가게 주인은 명보에게 T원의 지폐를 동전으로 바꿔 주려고 한다. 이때, 동전 교환 방법은 여러 가지가 있을 수 있다. 예를 들어, 10원 짜리, 5원 짜리, 1원 짜리 동전이 각각 2개, 3개, 5개씩 있을 때, 20원 짜리 지폐를 다음과 같은 4가지 방법으로 교환할 수 있다.</p> | ||
|
||
<ul> | ||
<li>20 = 10×2 </li> | ||
<li>20 = 10×1 + 5×2 </li> | ||
<li>20 = 10×1 + 5×1 + 1×5 </li> | ||
<li>20 = 5×3 + 1×5</li> | ||
</ul> | ||
|
||
<p>입력으로 지폐의 금액 T, 동전의 가지 수 k, 각 동전 하나의 금액 p<sub>i</sub>와 개수 n<sub>i</sub>가 주어질 때 (i=1, 2,…, k) 지폐를 동전으로 교환하는 방법의 가지 수를 계산하는 프로그램을 작성하시오. 방법의 수는 2<sup>31</sup>-1을 초과 하지 않는 것으로 가정한다.</p> | ||
|
||
### 입력 | ||
|
||
<p>첫째 줄에는 지폐의 금액 T(0<T ≤ 10,000), 둘째 줄에는 동전의 가지 수 k(0<k ≤ 100), 셋째 줄부터 마지막 줄까지는 각 줄에 동전의 금액 p<sub>i</sub>(0<p<sub>i</sub> ≤ T)와 개수 n<sub>i</sub>(0<n<sub>i</sub> ≤ 1,000)가 주어진다. p<sub>i</sub>와 n<sub>i</sub>사이에는 빈칸이 하나씩 있다.</p> | ||
|
||
### 출력 | ||
|
||
<p>첫째 줄에 동전 교환 방법의 가지 수를 출력한다. 방법이 없을 때는 0을 출력한다.</p> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#include <iostream> | ||
#include <algorithm> | ||
#include <vector> | ||
using namespace std; | ||
|
||
int main() | ||
{ | ||
ios_base::sync_with_stdio(0); | ||
cin.tie(0); | ||
//freopen("input.txt", "r", stdin); | ||
|
||
int t, k; | ||
cin >> t >> k; | ||
vector<vector<int>> dp(k+1, vector<int>(t+1, 0)); | ||
vector<pair<int, int>> coins; | ||
int p, n; | ||
for (int i = 0; i < k; i++) { | ||
cin >> p >> n; | ||
coins.push_back({p, n}); | ||
} | ||
|
||
dp[0][0] = 1; | ||
for (int i = 0; i < k; i++) { | ||
p = coins[i].first, n = coins[i].second; | ||
for (int j = 0; j <= t; j++) { | ||
dp[i+1][j] = dp[i][j]; | ||
} | ||
while (n > 0) { | ||
for (int j = 0; j <= t; j++) { | ||
if (dp[i][j] != 0 && j+p <= t) { | ||
dp[i+1][j+p] += dp[i][j]; | ||
} | ||
} | ||
n--; | ||
p += coins[i].first; | ||
} | ||
} | ||
cout << dp[k][t]; | ||
return 0; | ||
} |