题意
给定一个自然数 N N ,要求把拆分成若干个正整数相加的形式,参与加法运算的数可以重复,输出方案数% 2147483648 2147483648 。
思路
完全背包的模型。我们可以把 N N 拆分这 N N 个数看成完全背包的种物品, N N 看成背包的容积,改成累加就好了。
代码
#include<cstdio>
#define P 2147483648ll
long long f[10001];
int n;
int main() {
scanf("%d", &n);
f[0] = 1;
for (int i = 1; i <= n; i++)
for (int j = i; j <= n; j++)
f[j] = (f[j] + f[j - i]) % P;
printf("%lld", f[n] % P - 1);
}