• POJ 2229 Sunsets


    Sumsets
    Time Limit: 2000MS   Memory Limit: 200000K
    Total Submissions: 11009   Accepted: 4433

    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

     

    说实话我觉得这道题不应该算动态规划,难道分类到动规的原因是递推公式和记忆化,那好吧。。。

    设数字n的表示形式有f(n)种,递推公式就是:

    f(n)=f(n-1)  (n为奇数)

    f(n)=f(n/2)+f(n-1)  (n为偶数)

    因为只能用2^i表示,所以奇数必然要有1,1后面的表示方法数就是f(n-1)了,所以n为奇数时就是f(n)=f(n-1)

    而偶数时要分类计论,表示中含有1的和不含有1的,含有1的就是f(n-1),不含有1的就是f(n/2),所以n为偶数时就是上f(n)=f(n-1)+f(n/2)

     

     1 #include<iostream>
     2 #include<cstdio>
     3 
     4 using namespace std;
     5 
     6 const int mod=1000000000;
     7 
     8 long long dp[1000010];
     9 
    10 int main()
    11 {
    12     int n;
    13 
    14     dp[1]=1;
    15     for(int i=2;i<=1000000;i++)
    16         if(i%2)
    17             dp[i]=dp[i-1];
    18         else
    19             dp[i]=(dp[i-1]+dp[i/2])%mod;
    20 
    21     while(scanf("%d",&n)==1)
    22         cout<<dp[n]<<endl;
    23 
    24     return 0;
    25 }
    [C++]
  • 相关阅读:
    .某机构java架构师路线
    大数据计算的思想--RDD理解
    大数据组件以及岗位职业规划
    大数据技术路线图 --全图.md
    大数据技术路线图 --全图
    视频会议 lsk_lyy_share
    富文本文档git神奇-simul document
    获取当前app的版本号
    在vue中用axios设置请求拦截和响应拦截
    苹果IOS下text-shadow与box-shadow失效的解决办法
  • 原文地址:https://www.cnblogs.com/lzj-0218/p/3273298.html
Copyright © 2020-2023  润新知