hdu_4651_Partition(公式)

时间:2023-12-25 17:36:25

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4651

题意:给你一个数n,让你输出将n拆分的方案数。

题解:公式题,不解释,当模版记住就行

 #include <cstdio>
#include <cstring>
#define LL long long
const LL mod=;
LL p[];
void init(){
p[]=p[]=,p[]=,p[]=;
for(int i=; i<=;i++){
int fg=;p[i]=;
for(int j=;; ++j){
int a=(j*j*+j)/,b=(j*j*-j)/;
if(b>i&&a>i)break;
if(a<=i)p[i]=(p[i]+p[i-a]*fg+mod)%mod;
if(b<=i)p[i]=(p[i]+p[i-b]*fg+mod)%mod;
fg=(-)*fg;
}
}
}
int main(){
init();
int t,n;
scanf("%d",&t);
while(t--)scanf("%d",&n),printf("%I64d\n",p[n]);
return ;
}