※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2624번 문제인 동전 바꿔주기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2624
2624번: 동전 바꿔주기
명보네 동네 가게의 현금 출납기에는 k 가지 동전이 각각 n1, n2, … , nk개 씩 들어있다. 가게 주인은 명보에게 T원의 지폐를 동전으로 바꿔 주려고 한다. 이때, 동전 교환 방법은 여러 가지가 있을
www.acmicpc.net
j번째 동전까지들을 이용해 i원 지폐를 동전들로 환전할 경우의 수를 total[j][i]라 하자. 이 때 j+1에 대한 각 total[j+1][i]의 값은 total[j][i - (j+1번째 동전을 이용해 만들 수 있는 가능한 금액들)]의 합으로 구할 수 있음을 관찰하자.
위에서 관찰한 점화관계를 이용해 dp로 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int T, K;
int total[10001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
total[0] = 1;
cin >> T >> K;
while (K--) {
int P, N; cin >> P >> N;
for (int i = T - 1; i > -1; i--) {
for (int j = i + P, k = 0; j <= T && k < N; j += P, k++) {
total[j] += total[i];
}
}
}
cout << total[T];
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2436 // C++] 공약수 (1) | 2024.01.02 |
---|---|
[BOJ 4108 // C++] 지뢰찾기 (1) | 2024.01.01 |
[BOJ 3077 // C++] 임진왜란 (0) | 2023.12.30 |
[BOJ 3075 // C++] Astromeeting (1) | 2023.12.29 |
[BOJ 3061 // C++] 사다리 (0) | 2023.12.28 |