Sumsets POJ

来源:互联网 发布:python set insert 编辑:程序博客网 时间:2024/05/22 06:37

题意:给一个数,将其进行分解,只能分解为2的幂次,最多能分解多少种。


分析:对于奇数n,F(n)与F(n-1)只有一个1的差别,所以n的最大分解种一定和n-1相同。

           对于偶数m,F(m)由两种类型的组合组成,一部分是不包含1的组合(不包含1时的种类就等于F(m/2)的种类数,因为此时的队列的所有元素都除以2的话就是F(m/2)的组合)


收获:向前寻找相关性的技巧,dp的省时。


 #include<stdio.h>unsigned long long  number[1000005];void get_number(){    number[0]=0;    number[1]=1;    number[2]=2;    number[3]=2;    for(int i=4;i<1000005;i++)    {        if(i%2==0)        {            number[i]=(number[i-2]+number[i/2])%1000000000;        }        if(i%2==1)        {            number[i]=number[i-1]%1000000000;        }    }    return ;}int main (){    get_number();    int n;    scanf("%d",&n);    printf("%lld",number[n]);    return 0;}


0 0
原创粉丝点击