zoukankan      html  css  js  c++  java
  • HDU 2709 Sumsets 经典简单线性dp

    Sumsets

    Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 3968    Accepted Submission(s): 1578


    Problem 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).
     
    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
     
    Source
     
    Recommend
    teddy
     
    分析:
    划分规则:
    1或者2倍数
    dp[i]:i的方案数
    i为奇数:肯定有一个落单的1,所以就是i-1的方法数
    i为偶数:两种情况
    两个1:所以就是i-2的方法数
    没有1:i/2的所有方案*2就是i的方案数
     
    code:
    #include<stdio.h>
    #include<iostream>
    #include<math.h>
    #include<string.h>
    #include<set>
    #include<map>
    #include<list>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    int mon1[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int mon2[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31};
    int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
    
    //sf???
    #define max_v 1000005
    LL dp[max_v];
    int main()
    {
        dp[1]=1;
        dp[2]=2;
        for(int i=3;i<=1000000;i++)
        {
            if(i%2==1)
                dp[i]=dp[i-1]%1000000000;
            else
                dp[i]=(dp[i-2]+dp[i/2])%1000000000;
        }
        int x;
        while(~scanf("%d",&x))
        {
            printf("%lld
    ",dp[x]);
        }
        return 0;
    }
    /*
    划分规则:
    1或者2倍数
    
    dp[i]:i的方案数
    
    i为奇数:肯定有一个落单的1,所以就是i-1的方法数
    i为偶数:两种情况
    两个1:所以就是i-2的方法数
    没有1:i/2的所有方案*2就是i的方案数
    */
  • 相关阅读:
    gzip是一种数据格式,deflate是一种压缩算法
    js 实现图片上传 续
    iframe 元素会创建包含另外一个文档的内联框架(即行内框架)
    HTTPS简介----
    回归测试
    HTTP 返回码 400
    js 实现 一张图片的上传
    121. Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    118. Pascal's Triangle
  • 原文地址:https://www.cnblogs.com/yinbiao/p/9794236.html
Copyright © 2011-2022 走看看