题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4651
题意:给你一个数n,让你输出将n拆分的方案数。
题解:公式题,不解释,当模版记住就行
#include <cstdio>
#include <cstring>
#define LL long long
const LL mod=1000000007;
LL p[100010];
void init(){
p[0]=p[1]=1,p[2]=2,p[3]=3;
for(int i=4; i<=100000;i++){
int fg=1;p[i]=0;
for(int j=1;; ++j){
int a=(j*j*3+j)/2,b=(j*j*3-j)/2;
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=(-1)*fg;
}
}
}
int main(){
init();
int t,n;
scanf("%d",&t);
while(t--)scanf("%d",&n),printf("%I64d\n",p[n]);
return 0;
}