显而易见的完全背包…
很容易看出dp方程为dp[i]+=dp[i-val[j]],其中i是表示的钱数,val[j]是第j个面值,dp[i]是方法数
/*
ID:rainbow16
LANG:C++
TASK:money
*/
#include<stdio.h>
int n,v,val[30];
long long dp[10005];
int main(void)
{
freopen("money.in","r",stdin);
freopen("money.out","w",stdout);
scanf("%d%d",&v,&n);
for(int i=0;i<v;i++)
scanf("%d",&val[i]);
dp[0]=1;
for(int i=0;i<v;i++)
for(int j=val[i];j<=n;j++)
dp[j]+=dp[j-val[i]];
printf("%lld\n",dp[n]);
return 0;
}