zoukankan      html  css  js  c++  java
  • poj--2229

    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

    本题借鉴了一片博客,博主写的挺好的
    题目大意:给定一个数用2的幂次方数,求可以有多少表达方式。
    题解:动态规划和递推,如果i为偶数,dp[i]=dp[i/2]+dp[i-2]
      偶数的时候分有一和没有一进行考虑,
      有一的话就肯定有两个一,那么dp[i]=dp[i-2];
      没有一的话,就是都除以2 dp[i]=dp[i/2];
      i为奇数,肯定有一个一 dp[i]=dp[i-1];
    代码:
    #include<iostream>
    #include<cstring>
    using namespace std;
    const int M=1000000000;
    const int MAXN=1000010;
    int dp[MAXN];
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            dp[0]=dp[1]=1;
            for(int i=2;i<=n;i++)
            {
                if(i & 0x01)
                    dp[i]=dp[i-1];
                else
                    dp[i]=(dp[i-2]+dp[i>>1])%M;
            }
            printf("%d
    ",dp[n]);
        }
        return 0;
    }
     
  • 相关阅读:
    hihoCoder #1077 RMQ问题再临-线段树
    ms sql 获取字符串首字母
    如何设置gen_server在退出时执行相关操作
    C++拾遗
    [置顶] Linux下文件和目录权限说明
    Android百度地图之显示地图
    USACO March. 2012
    JNI之HelloWorld
    复习C语言系列二:动态调用函数指针数组
    HDU2527:Safe Or Unsafe(哈弗曼树)
  • 原文地址:https://www.cnblogs.com/acmblog/p/9575836.html
Copyright © 2011-2022 走看看