1371. 货币系统
原题链接
给定 V 种货币(单位:元),每种货币使用的次数不限。
不同种类的货币,面值可能是相同的。
现在,要你用这 V 种货币凑出 N 元钱,请问共有多少种不同的凑法。
输入格式
第一行包含两个整数 V 和 N。
接下来的若干行,将一共输出 V 个整数,每个整数表示一种货币的面值。
输出格式
输出一个整数,表示所求总方案数。
输入样例
3 10
1 2 5
输出样例
10
解题思路
线性DP题,主要是对状态方程进行分析,然后就是记得long long输出如果用scanf要用%lld;
蒟蒻在这里WA了几次
状态方程
a[i][j]+=a[i-1][j-k*v1[i]];
AC代码
#include <cstdio>
long long a[30][10010];
int v1[30];
int main() {
int v,n;
scanf("%d %d",&v,&n);
for(int i=1; i<=v; i++)
scanf("%d",&v1[i]);
a[0][0]=1;
for(int i=1; i<=v; i++)//至少要有一种货币吧。。。
for(int j=0; j<=n; j++) {
for(int k=0; k*v1[i]<=j; k++)
a[i][j]+=a[i-1][j-k*v1[i]];//重点就是状态方程的分析,可以好好想想~
}
printf("%lld",a[v][n]);
}
附:初来乍到,如果有不足之处,恳请各位大牛指正,如果题解有错误或者没写清楚的地方也欢迎在评论区提问~