zoukankan      html  css  js  c++  java
  • 台州 OJ 1632 Sumsets

    描述

    农夫约翰命令他的母牛搜索不同数量的数字,总和到一个给定的数字。母牛只使用整数幂为2的数字。这是可能的数字组合,总和为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 

    帮助FJ计算给定整数N的所有可能表示(1 <= N <= 1,000,000)。

     

    当 n 是奇数,其方法数与 n-1 一样。 n 是偶数,则 n-1 的方法数加上 n/2 的方法数。(相比于 n-1 多出来的方法,就是把 n 拆成 (n/2)个 2,然后这些 2 合并的方法数。(n/2)个 2 与 (n/2)个 1 的方法数是一样多的)。

    代码:

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int MAX = 1000001;
    const int mod = 1000000000;
    
    long long dp[MAX];
    
    int main(){
        memset(dp, 0, sizeof(dp));
        dp[1] = 1;
        for(int i=2; i<MAX; i++){
            if(i & 1){
                dp[i] = dp[i-1];
            }else{
                dp[i] += (dp[i/2] % mod + dp[i-1] % mod) % mod;
            }
        }
        int n;
        while(cin >> n){
            cout << dp[n] << endl;
        }
    }
  • 相关阅读:
    面试
    二叉树- 二叉树直径
    排序算法
    JAVA编程
    JAVA编程
    JAVA中break和continue的区别
    HTTP的序列化和反序列化
    PL/SQL基础
    G. Game Design
    hdu 6703 array
  • 原文地址:https://www.cnblogs.com/lighter-blog/p/7226237.html
Copyright © 2011-2022 走看看