USACO section2.3 Money Systems题解&代码

显而易见的完全背包…
很容易看出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;
}

你可能感兴趣的:(C++,USACO)