任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量!由于方案数量较大,输出Mod 1000000007的结果。
比如N = 7时,共有6种划分方法。
7=1+1+1+1+1+1+1
=1+1+1+1+1+2
=1+1+1+2+2
=1+2+2+2
=1+1+1+4
=1+2+4
Input
输入一个数N(1 <= N <= 10^6)
Output
输出划分方法的数量Mod 1000000007
Sample Input
7
Sample Output
6
题解:
/*
n为奇数时f(n)=f(n-1);
n为偶数是f(n)=f(n-1)+f(n/2);
*/
代码:
#include<stdio.h>
const int N=1000005;
int a[N];
int main()
{
int mod=1000000007;
int n;
scanf("%d",&n);
a[0]=1;
for(int i=1;i<=n;i++){
if(i&1){//奇数
a[i]=a[i-1];
}
else {//偶数
a[i]=a[i-1]+a[i/2];
}
a[i]%=mod;
}
printf("%d\n",a[n]);
return 0;
}
/*
n为奇数时f(n)=f(n-1);
n为偶数是f(n)=f(n-1)+f(n/2);
*/