题解:

背包

每一个1<<i都是无限量

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1000005,M=1e9;
int n,dp[N];
int main()
{
    scanf("%d",&n);
    dp[0]=1;
    for (int i=0;i<20;i++)
     for (int j=1<<i;j<=n;j++)
      (dp[j]+=dp[j-(1<<i)])%=M;
    printf("%d",dp[n]);  
}

 

posted on 2018-02-25 15:54  宣毅鸣  阅读(78)  评论(0编辑  收藏  举报