题目描述
输入一个正整数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;
}
这个题还可以找规律,可以网上找找这种题解!!!!