题意
问将
n
n
分解成若干个可以相同的正整数的和的形式有多少种方案。多组数据。
。
分析
五边形数定理裸题。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
const int N=100005;
const int MOD=1000000007;
int n,f[N];
int solve(int n)
{
if (f[n]) return f[n];
for (int i=1;i*(i*3-1)/2<=n;i++)
{
if (!(i&1))
{
if (i*(i*3-1)/2<=n) (f[n]+=MOD-solve(n-i*(i*3-1)/2))%=MOD;
if (i*(i*3+1)/2<=n) (f[n]+=MOD-solve(n-i*(i*3+1)/2))%=MOD;
}
else
{
if (i*(i*3-1)/2<=n) (f[n]+=solve(n-i*(i*3-1)/2))%=MOD;
if (i*(i*3+1)/2<=n) (f[n]+=solve(n-i*(i*3+1)/2))%=MOD;
}
}
return f[n];
}
int main()
{
int T;scanf("%d",&T);
f[0]=f[1]=1;
while (T--)
{
scanf("%d",&n);
printf("%d\n",solve(n));
}
return 0;
}