首页 > 其他 > 详细

poj--2229

时间:2018-09-03 02:05:04      阅读:224      评论:0      收藏:0      [点我收藏+]

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\n",dp[n]);
    }
    return 0;
}

 

 

poj--2229

原文:https://www.cnblogs.com/acmblog/p/9575836.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!