编辑代码

#include <iostream>
#include <cmath>

#define MAX 1000

using namespace std;

unsigned int LOG2(unsigned int x){
    unsigned int ret;
    __asm__ __volatile__ ("bsrl %1, %%eax":"=a"(ret):"m"(x));
    return ret;
}
int Way(int n, int dp[]){
    int m = LOG2(n);
    if(n<0) return 0;
    if(n==0) return 1;
    if(dp[n]>0) return dp[n];
    else{
        for(int i=0; i<=m; i++){
            dp[n] += Way(n-pow(2,i), dp);
        }
        return dp[n];
    }
}
int main(){
    int m[MAX]={0};
    int N;
    cin >> N;
    cout << Way(N,m) << endl;
}