1 条题解

  • 0
    @ 2026-2-7 10:57:03
    #include<bits/stdc++.h>
    using namespace std;
    
    // 取模值:2^31,用unsigned int存储可自动处理部分溢出
    const unsigned int MOD = 2147483648;
    
    int main(){
        int n;
        cin >> n;
    
        // dp[j] 表示拆分j的方案数(包含拆成1个数的情况)
        vector<unsigned int> dp(n + 1, 0);
        dp[0] = 1;  // 初始条件:拆分0有1种方案
    
        // 完全背包模型:遍历每个可用于拆分的数字i
        for (int i = 1; i <= n; ++i) {
            // 正序遍历j,允许重复使用i
            for (int j = i; j <= n; ++j) {
                dp[j] = (dp[j] + dp[j - i]) % MOD;
            }
        }
    
        // 减去“拆成1个数”的情况,再取模确保非负
        unsigned int result = (dp[n] - 1 + MOD) % MOD;
        cout << result << endl;
    
        return 0;
    }
    
    • 1

    信息

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