码迷,mamicode.com
首页 > 其他好文 > 详细

poj--2229

时间:2018-09-03 02:20:50      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:code   mes   string   cstring   没有   count   while   ring   using   

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

标签:code   mes   string   cstring   没有   count   while   ring   using   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!