※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts