1273:【例9.17】貨幣系統
時間限制: 1000 ms 內存限制: 65536 KB
提交數: 6154 通過數: 2682
【題目描述】
給你一個n種面值的貨幣系統,求組成面值爲m的貨幣有多少種方案。
【輸入】
第一行爲n和m。
【輸出】
一行,方案數。
【輸入樣例】
3 10 //3種面值組成面值爲10的方案
1 //面值1
2 //面值2
5 //面值5
【輸出樣例】
10 //有10種方案
思路:設f[i]表示面值爲j得總方案數,如果f[j-a[i]] != 0,則f[j] = f[j] + f[j-a[i]] ,1<=i<=n,a[i]<=j<=m。
#include<cstdio>
#include<iostream>
#define N 10005
typedef long long ll;
using namespace std;
ll m,n,dp[N],a[N],i,j;
int main(){
scanf("%d%d",&n,&m);
for(i = 1; i <= n; i++)
cin >> a[i];
dp[0] = 1;
for(i = 1; i <= n; i++)
for(j = a[i];j <= m;j++)
dp[j] += dp[j-a[i]];
printf("%lld\n",dp[m]);
return 0;
}