还是数学知识匮乏,需要用到五边形数定理
以后得补充这类知识啊
#include <stdio.h>
#define LL long long
LL p[100005];
int T,n,t;
int main()
{
p[0]=1;
p[1]=1;
p[2]=2;
for(int i=3; i<=100000; i++)
{
for(int j=1;; j++)
{
for(int k=0; k<2; k++)
{
if(!k) t=(3*j*j-j)/2;
else t=(3*j*j+j)/2;
if(t>i)break;
if(j%2==1)
p[i]+=p[i-t];
else
p[i]-=p[i-t]-1000000007;
p[i]%=1000000007;
}
if(t>i)break;
}
}
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
printf("%I64d\n",p[n]);
}
return 0;
}