zoukankan      html  css  js  c++  java
  • POJ 2229 Sumsets(简单DP)

    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). 

    Input

    A single line with a single integer, N.

    Output

    The number of ways to represent N as the indicated sum. Due to the potential huge size of this number, print only last 9 digits (in base 10 representation).

    Sample Input

    7

    Sample Output

    6
    题意:
      
      一个数N能被拆分成多少种只由2的n次方相加的组合。
    题解:
      
      刚开始怎么也推不出来,╮(╯▽╰)╭自己还是好菜啊。。看了别人的题解后发现其实很容易。?
      当i为奇数时,dp[i]=dp[i-1];当i为偶数时,dp[i]=dp[i-1]+dp[i/2]。
    i为奇数,dp[i]等于前一个偶数的组合+1。偶数时,等于前一个数+1的组合数,加上dp[i/2]的组合数(可以看成提个公因子2)。
    #include<iostream>
    using namespace std;
    const int maxn=1e6+5,mod=1e9;
    int dp[maxn];
    int main()
    {
        int n;
        cin>>n;
        dp[1]=1,dp[2]=2;
        for(int i=3;i<=n;i++)
            dp[i]=(i&1)?dp[i-1]:(dp[i-2]+dp[i>>1])%mod;
        cout<<dp[n]<<endl;
    }
    
    
    
     
  • 相关阅读:
    linux学习记录-----vsftpd服务安装配置
    PTA数据结构第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/orion7/p/7497147.html
Copyright © 2011-2022 走看看