题目大意
给出一个货币系统,即你有哪些面值的货币,问给出的数值有几种组成方式。
样例输入&输出
sample input
3 10
1 2 5
sample output
10
分析&反思
背包问题,复习一下。
完全背包,只不过存储的是方案数。
等于以前是判断方案是否更优,现在是有新方案就传过来。
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long v, n, a[30], dp[10005];
int main() {
freopen("money.in", "r", stdin);
freopen("money.out", "w", stdout);
cin >> v >> n;
for(int i = 1; i <= v; i++) cin >> a[i];
dp[0] = 1;
for(int i = 1; i <= v; i++)
for(int j = 0; j <= n - a[i]; j++) dp[j+a[i]] += dp[j];
cout << dp[n] << endl;
return 0;
}
备注
背包九讲考不考虑复习一下?