二的幂

题目描述

输入一个正整数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,1<=n<=1000000

输出

一个正整数,代表用2的幂组合出n的方案数,由于结果可能很大,仅保留后九位数字。

样例输入    样例输出

7               6

思路:完全背包裸题

代码如下:

#include<stdio.h>

const int mod = 1e9;

const int maxn = 1e6 + 10;

int n,dp[maxn] = {1};

int main() {

    scanf("%d",&n);

    for(int i=1;i<=n;i<<=1)

        for(int j=i;j<=n;j++) {

            dp[j]+=dp[j-i];

            if(dp[j]>=mod) dp[j]%=mod;

        }

    printf("%d\n",dp[n]);

    return 0;

}

这个题还可以找规律,可以网上找找这种题解!!!!

猜你喜欢

转载自blog.csdn.net/DreamTrue1101/article/details/82349408