将n划分成2的幂,有多少种划分方法
解析:当n是奇数时,只是每种情况比n-1多了一个1
当n是偶数时,包含一的情况是n-1多了一个1
不含1 的情况就是n/2的情况数,因为n拆分出所有的数字都是2的倍数,只需要将每种拆分结果中的数字都除以2就会与n/2的一种拆分相对应。
#include<cstdio>
const int N=1e7+10;
const int mod=1e9+7;
int s[N];
void solve()
{
s[1]=1;
for(int i=2;i<=N;i++)
{
if(i%2) s[i]=s[i-1];
else
s[i]=(s[i-1]+s[i/2])%mod;
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
solve();
while(~scanf("%d",&n))
printf("%d\n",s[n]);
return 0;
}