zoukankan      html  css  js  c++  java
  • DP 之 poj 2229

    //  [3/24/2014 Sjm]
    /*
    解法分析:
    依次列出 N=1, 2, 3, 4, 5, 6, 7, 寻找规律:
    (1) 若 n 为奇数:dp[n] = dp[n - 1] (第一个数必是1, 将第一个数去掉, 其所剩个数 即 dp[n-1])
    (2) 若 n 为偶数:
    	1) 第一个数字为1,将第一个数去掉, 其所剩个数 即 dp[n-1]
    	2)第一个数为偶数(所有的这一排数均为偶数), 将2提出去,即可得 dp[n>>1]
    	两者加和,即为答案。
    */
     1 #include <iostream>
     2 #include <cstdlib>
     3 #include <cstdio>
     4 #include <vector>
     5 using namespace std;
     6 const int Mod = 1e9;
     7 int N;
     8 
     9 int Solve()
    10 {
    11     vector<int> dp(N+1);
    12     dp[1] = 1; 
    13     for (int i = 2; i <= N; i++){
    14         if (i & 1) dp[i] = dp[i - 1];
    15         else dp[i] = (dp[i - 1] + dp[i >> 1]) % Mod;
    16     }
    17     return dp[N];
    18 }
    19 
    20 int main()
    21 {
    22     //freopen("input.txt", "r", stdin);
    23     //freopen("output.txt", "w", stdout);
    24     while (scanf("%d", &N) != EOF)
    25         printf("%d\n", Solve());
    26     return 0;
    27 }
  • 相关阅读:
    集合
    16
    最常使用Eclipse快捷键
    Java小菜的进阶之路(异常捕获与处理(一))
    0803作业
    0801作业
    java中this与super的见解
    7.27作业
    7.23作业
    java内部类的浅谈(错误之处还请见谅!)
  • 原文地址:https://www.cnblogs.com/shijianming/p/4140873.html
Copyright © 2011-2022 走看看