AcWing1371通貨システム

タイトル説明:

VV通貨(単位:人民元)を考えると、各通貨を使用できる回数に制限はありません。

異なる通貨は同じ額面金額を持つ場合があります。

さて、このVV通貨を使用してNN元を収集する場合、さまざまな方法がありますか?

入力フォーマット

最初の行には、2つの整数VVとNNが含まれています。

次の数行は、それぞれが通貨の額面を表す合計VV整数を出力します。

出力フォーマット

要求されたソリューションの総数を表す整数を出力します。

データ範囲

1≤V≤251≤V≤25、
1≤N≤100001≤N≤10000
答えは内にあることが保証されているlong long範囲。

入力サンプル:

3 10
1 2 5

サンプル出力:

10

 

#include <iostream>
#include <cstdio>

using namespace std;
const int MAX = 10009;

typedef long long LL;
int n, m;
LL a[30][MAX];
int w[30];

int main()
{
    scanf("%d%d", &n, &m);
    a[0][0] = 1;

    for(int i = 1; i <= n; i++)
        scanf("%d", &w[i]);

    for(int i = 1; i <= n; i++)
    {
        for(int j = 0; j <= m; j++)
        {
            for(int k = 0; k * w[i] <= j; k++)
                a[i][j] += a[i - 1][j - k * w[i]]; // 面值为w[i]的选k个
        }
    }
    printf("%lld\n", a[n][m]);
    return 0;
}

 

おすすめ

転載: blog.csdn.net/weixin_44620183/article/details/113509577