tyvj[1087]sumsets

描述

    正整数N可以被表示成若干2的幂次之和。例如,N = 7时,共有下列6种不同的方案:
1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
    给出正整数N,计算不同方案的数量(保留最后9位数字)。

输入格式

一个整数,表示正整数N。

输出格式

一个整数,表示不同方案的数量。

测试样例1

输入

7

输出

6

备注

 1 <= N <= 1000000

题解

#include<iostream>
using namespace std;
int n,bin[21],f[1000001];
int main(){
    cin>>n;
    bin[0]=1;
    for(int i=1;i<=20;i++)
        bin[i]=bin[i-1]<<1;
    f[0]=1;
    for(int i=0;i<=20;i++)
        for(int j=bin[i];j<=n;j++)
            f[j]=(f[j]+f[j-bin[i]])%1000000000;
    cout<<f[n]<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/keshuqi/p/6130947.html