现在的位置: 首页 > 综合 > 正文

bzoj1677[Usaco2005 Jan]Sumsets 求和

2018年01月13日 ⁄ 综合 ⁄ 共 947字 ⁄ 字号 评论关闭

Description

Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the
possible sets of numbers that sum to 7: 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 Help FJ count all possible representations for a given integer N (1 <= N <= 1,000,000).

给出一个N(1N10^6),使用一些2的若干次幂的数相加来求之.问有多少种方法

Input

   一个整数N.

Output

方法数.这个数可能很大,请输出其在十进制下的最后9位.

Sample Input

7

Sample Output

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

背包dp……而且价值还是给定的

#include<cstdio>
#define mod 1000000000
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
const int w[20]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288};
int n;
int f[1000001];
int main()
{
	n=read();
	f[0]=1;
	for (int i=0;i<20;i++)
	  for (int j=w[i];j<=n;j++)
	    f[j]=(f[j]+f[j-w[i]])%mod;
	printf("%d",f[n]);
}

抱歉!评论已关闭.