典型的空间换时间问题。
#include<stdio.h>
int n,i;
long long num[1000005]={0};
int main()
{
num[1]=1;
num[2]=2;
for(i=3;i<=1000005;i++)
{
if(i%2)
num[i]=num[i-1];
else
num[i]=num[i-1]+num[i/2];
if(num[i]>1000000000)
num[i]-=1000000000;
}
scanf("%d",&n);
printf("%d\n",num[n]);
}