简单的递推,类似背包那种加
1
或翻倍的思路。
写这题其实只是水一篇
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=10000005,MOD=1e9+7;
int n,f[maxn];
int main(){
scanf("%d",&n);
f[1]=1; for(int i=2;i<=n;i++) f[i]=(f[i-1]+f[i>>1]*(!(i&1)))%MOD;
printf("%d\n",f[n]);
return 0;
}