1 条题解

  • 0
    @ 2025-10-11 20:43:13

    初始化dp[0] = 1(和为0只有一种组合,即不选任何数)。

    对于每个数字,从B向下更新到该数字的值,执行dp[j] += dp[j - a[i]]。

    #include <iostream>
    #include <vector>
    using namespace std;
    int main()
    {
        int A, B;
        cin >> A >> B;
        vector<unsigned short> a(A);
        for (int i = 0; i < A; i++)
        {
            cin >> a[i];
        }
    
        vector<int> dp(B + 1, 0);
        dp[0] = 1;
    
        for (int i = 0; i < A; i++)
        {
            for (int j = B; j >= a[i]; j--)
            {
                dp[j] += dp[j - a[i]];
            }
        }
        
        cout << dp[B] << endl;
        return 0;
    }
    

    信息

    ID
    225
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者