1 条题解
-
0
#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; }
信息
- ID
- 1334
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者