
문제 분석 및 풀이
설계 분석
- 동적 계획법 문제
- i번째 동전까지 사용해서 금액 j를 만들때 i-1번째 동전까지 사용해서 만든 금액을 다시 활용한다.
- 해당 단계의 결과가 다음 단계에 사용되므로 동적 계획법과 어울린다.
풀이
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int T, K;
int dp[101][10001];
int coin[101];
int cnt[101];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> T >> K;
for (int i=1; i<=K; i++)
cin >> coin[i] >> cnt[i];
dp[0][0] = 1;
for (int i = 1; i <= K; i++)
{
for (int j = 0; j <= T; j++)
{
for (int l = 0; l <= cnt[i]; l++)
{
int val = j - coin[i] * l;
if (val < 0) break;
dp[i][j] += dp[i-1][val];
}
}
}
cout << dp[K][T];
system("pause");
return 0;
}