문제링크 : https://www.acmicpc.net/problem/9084
#include <bits/stdc++.h>
using namespace std;
int t, n, coin[21], m;
int dp[10001];
int main()
{
cin >> t;
while (t--)
{
memset(dp, 0, sizeof(dp)); //매 케이스마다 배열을 0으로 초기화
dp[0] = 1; //처음 경우의 수는 무조건 1이므로 1로 초기화
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> coin[i];
}
cin >> m;
for (int i = 0; i < n; i++)
{
for (int j = coin[i]; j <= m; j++)
{
dp[j] += dp[j - coin[i]]; //각 동전이 가지는 경우의 수마다 배열에 더해줌
}
}
cout << dp[m] << "\n";
}
}
규칙을 찾기가 너무 빡세서 검색을 참고했다.
막상 코드 자체는 쉬운편이지만 점화식을 떠올리기가 힘든 문제였다.
'백준 > 골드' 카테고리의 다른 글
[백준 20917번] 사회적 거리 두기 (C++) (0) | 2023.02.09 |
---|---|
[백준 24524번} 아름다운 문자열 (C++) (0) | 2023.02.07 |
[백준 12919번] A와 B 2 (C++) (0) | 2023.02.05 |
[백준 16120번] PPAP (C++) (0) | 2023.02.05 |
[백준 11058번] 크리보드 (C++) (0) | 2023.02.05 |