top1编程
← 返回题目
题解

【基础】小明买书

1 条题解

  • 0
    @ 2026-7-29 0:18:07
    #include <iostream>
    using namespace std;
    
    long long n, dp[105][10005], m, a[105];
    
    int main() {
        cin >> n >> m;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
        }
        
        // 初始化
        for (int i = 0; i <= n; i++) dp[i][0] = 1;
        
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (j >= a[i]) {
                    dp[i][j] = dp[i-1][j] + dp[i-1][j - a[i]];
                } else {
                    dp[i][j] = dp[i-1][j];  // 不选当前数
                }
            }
        }
        
        cout << dp[n][m];
        return 0;
    }
    
    • 1