跳转至

一本通-1273:【例9.17】货币系统

【题目描述】 给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。

【输入】 第一行为n和m。

【输出】 一行,方案数。

【输入样例】 3 10 //3种面值组成面值为10的方案 1 //面值1 2 //面值2 5 //面值5

【输出样例】 10 //有10种方案


#include <bits/stdc++.h>

using namespace std;

int n, m;
vector<int> seq(10005);
vector<long long> d(10005);

long long completePack()
{
    d[0] = 1;
    for (int i = 0; i < n; ++i) {
        for (int j = seq[i]; j <= m; ++j) {
            d[j] += d[j - seq[i]];
        }
    }

    return d[m];
}

int main()
{
    std::ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> n >> m;
    for (int i = 0; i < n; ++i) cin >> seq[i];
    cout << completePack() << endl;

    return 0;
}