문제 바로가기> 백준 2293번: 동전 1
dp[k]
: 가치의 합이 k원이 되는 경우의 수
dp[0]
: 가치의 합이 0원이 되는 경우의 수 = 1dp[k]
: dp[k] = dp[k] + dp[k - coin[i]]
dp[k - coin[i]]
: coin[i]를 사용 -> coin[i]만큼의 가치를 비운 후 그 경우의 수를 더해준다!#include<iostream>
#include<cstring>
#define MAX_N 101
#define MAX_K 10001
using namespace std;
int N, K;
int coin[MAX_N];
int dp[MAX_K];
void input() {
cin >> N >> K;
for (int i = 1; i <= N; i++) cin >> coin[i];
}
void solution() {
dp[0] = 1;
for (int i = 1; i <= N; i++) {
for (int j = coin[i]; j <= K; j++) dp[j] = dp[j] + dp[j - coin[i]];
} cout << dp[K];
}
int main() {
input();
solution();
}