求一个数能用1, 2, 4, 8, 16......相加表示有多少种方法
如果n是奇数的话肯定有一个1,所以可以拿掉
如果是偶数的话,要么有两个1,或者全是偶数,前者就拿掉两个1,后者就全部除2。
比如4,4=1+1+2;2又有2种分法。这种情况下2又有两种情况。全部都是偶数的情况下4可以分为4与2+2,即为f(4/2)=f(2);
int d[1000005];
int main()
{
int i;
d[1] = 1;
d[2] = 2;
for (i = 3; i <= 1000000; ++i) {
if (i % 2 == 1)
d[i] = d[i - 1];
else d[i] = d[i - 2] + d[i / 2];
if (d[i] >= 1000000000)
d[i] -= 1000000000;
}
int n;
while (cin>>n)
cout<<d[n]<<endl;
return 0;
}