결론: 주어진 동전 종류로 주어진 금액을 만드는 경우의 수를 구하라
📌 dp[i] = dp[i] + dp[i - 동전 금액]
dp[i]
는 i
원을 만드는 경우의 수를 의미한다.
i원을 만드는 경우의 수는 기존의 상태에 (i - 동전 금액)원을 만드는 경우의 수를 더해나가며 구해주면 된다는 의미의 점화식이다.
이때 dp[0] = 1이다.
0원을 만드는 경우의 수는 아무 동전도 쓰지 않는 딱 하나의 경우의 수만을 갖는다.
이 dp[0]이 최초의 기존의 상태 역할을 해준다.
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m, t;
cin >> t;
while(t--){
int dp[10001] = {0, };
int arr[20] = {0, };
cin >> n;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
cin >> m;
dp[0] = 1;
for(int i = 0; i < n; i++){
for(int j = arr[i]; j <= m; j++){
dp[j] += dp[j - arr[i]];
}
}
cout << dp[m] << "\n";
}
return 0;
}