完全背包问题
代码
#include<iostream>
using namespace std;
const int mod=1e9,MAX=1e6+10;
int f[MAX];
int main(){
int n;
f[0]=1;
while(~scanf("%d",&n)){
for(int i=1;i<=n;i*=2){
for(int j=i;j<=n;++j){
f[j]=(f[j]+f[j-i])%mod;
}
}
printf("%d\n",f[n]);
}
return 0;
}