문제링크 : https://www.acmicpc.net/problem/3067
3067번: Coins
우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 모든 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어 30원을 만들기 위해
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int T, N, M;
int arr[21];
int dp[10001];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while(T--)
{
cin >> N;
for(int i=0; i<N; i++)
{
cin >> arr[i];
}
cin >> M;
memset(dp, 0, sizeof(dp)); //케이스마다 초기화
dp[0]=1; //첫 값 초기화
for(int i=0; i<N; i++) //동전 갯수
{
for(int j=arr[i]; j<=M; j++) //합
{
dp[j] = dp[j] + dp[j-arr[i]]; //점화식
}
}
cout << dp[M] << "\n";
}
}
유사한 타입이 많은 배낭 문제이다.
해당 문제는 테스트케이스가 여러가지이기 때문에 dp식을 매 테스트마다 초기화를 해주어야한다.
동전의 가짓수를 담은 arr 배열은 N과 내용을 새로 입력 받기 때문에 초기화를 할 필요가 없다.
'백준 > 골드' 카테고리의 다른 글
[백준 3584번] 가장 가까운 공통 조상 (C++) (0) | 2023.10.29 |
---|---|
[백준 1240번] 노드사이의 거리 (C++) (0) | 2023.10.26 |
[백준 1068번] 트리 (C++) (0) | 2023.10.24 |
[백준 5582번] 공통 부분 문자열 (C++) (0) | 2023.10.23 |
[백준 15681번] 트리와 쿼리 (C++) (0) | 2023.10.22 |