题意
给定一个自然数NN,要求把拆分成若干个正整数相加的形式,参与加法运算的数可以重复,输出方案数%21474836482147483648。
思路
完全背包的模型。我们可以把NN拆分这NN个数看成完全背包的种物品,NN看成背包的容积,改成累加就好了。
代码
#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);
}