题目描述
计算将一个给定的正整数划分为一系列正整数的和的方案数,称为整数的划分问题,例如,当给定正整数为6时,可以有如下划分:
6=6;
6=5+1;
6=4+2=4+1+1;
6=3+3=3+2+1=3+1+1+1;
6=2+2+2=2+2+1+1=2+1+1+1+1;
6=1+1+1+1+1+1+1。
如果用f(n)代表正整数n的划分数,则f(6)=11
现在,给你数字n,要求你计算f(n)
输入
一个整数n
输出
输出f(n)。注意,由于答案非常大,你的答案需要输出模除1000000007之后的结果
样例输入
6
样例输出
11
代码如下:
#include<stdio.h>
long long mod = 1000000007;
int max= 100000;
int main()
{
long long a1[max];
long long a2[max];
int n;
int i;
int j;
int k;
scanf("%d",&n);
for(i=0;i<=n;i++)
{
a1[i]=1;
a2[i]=0;
}
for(i=2;i<=n;i++)
{
for(j=0;j<=n;j++)
{
for(int k=0;k+j<=n;k+=i)
a2[k+j]=(a1[j]+a2[k+j])%mod;
}
for( k=0;k<=n;k++)
{
a1[k]=a2[k];
a2[k]=0;
}
}
printf("%lld\n",a1[n]%mod);
return 0;
}