题目
把 n n n拆分成若干个正整数相加的形式,正整数可以重复,问方案数 m o d 2 31 mod 2^{31} mod231
分析
完全背包,
状态转移方程:
f
[
j
]
=
(
f
[
j
]
+
f
[
j
−
i
]
)
f[j]=(f[j]+f[j-i])
f[j]=(f[j]+f[j−i]) and
2147483648
;
2147483648;
2147483648;
代码
#include <cstdio>
unsigned int n,f[4001];
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])&0x7fffffff;//完全背包
return !printf("%d",f[n]-1);
}