• 4月3日


    poj2229

    题意:给定一个数,把它拆分成2的n次幂相加的形式,问有多少种方法,结果取后9位

    分析:这道题目很有意思,可以把一个数i分成奇数和偶数的情况来讨论,当i是奇数时,i拆分以后的个数与i-1是一样的,而当i是偶数时,相当于将i-1加上一个1以后同时可以把两个1为一组进行合并,故为i-1与i/2的和

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 const int mod=1000000000;
    15 const int maxn=1001000;
    16 int dp[maxn];
    17 int n;
    18 int main()
    19 {
    20     while(cin>>n)
    21     {
    22         memset(dp,0,sizeof(dp));
    23         dp[1]=1;
    24         dp[2]=2;
    25         for(int i=3;i<=n;i++)
    26         {
    27             if(i%2)
    28                 dp[i]=dp[i-1]%mod;
    29             else
    30                 dp[i]=(dp[i-1]+dp[i/2])%mod;
    31         }
    32         cout<<dp[n]<<endl;
    33     }
    34     return 0;
    35     return 0;
    36 }
    View Code

     poj2385

    题意:牛在1,2两棵树之间接苹果,苹果总共落下t次,牛总共可在树之间走w次,问牛最多能吃到多少苹果,开始时牛在第一棵树下

    分析:一个很经典的dp问题,这题要好好总结一下,开始我的思路有些问题,后来看了下题解之后有所领悟。跟上面一题一样,还是要分为奇数跟偶数两种情况来进行讨论,当牛走的次数为偶数时,在树1下,当牛走的次数为奇数时,在树2下。dp[i][j]记录牛在第i秒走了j次之后所吃苹果的最大值,那么也就是记录每一步走或者不走的最大值。显然dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])。因为i-1次只能走j步或者j-1步。用a[i]==j%2+1,来判断是否第几棵树。别忘了初始化。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 const int maxn=1010;
    15 int dp[maxn][40];
    16 int a[maxn];
    17 int t,w;
    18 int main()
    19 {
    20     while(cin>>t>>w)
    21     {
    22         memset(dp,0,sizeof(dp));
    23         for(int i=1;i<=t;i++)
    24             cin>>a[i];
    25         for(int i=1;i<=t;i++)    //初始化,表示一次都不走的情况
    26             dp[i][0]=dp[i-1][0]+(a[i]%2);
    27         for(int i=1;i<=t;i++)
    28         {
    29             for(int j=1;j<=w;j++)
    30                 dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+(a[i]==j%2+1);
    31         }
    32         cout<<dp[t][w]<<endl;
    33     }
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    LLVM 笔记(二)—— PHI node
    Ubuntu,sublime快速启动
    ubuntu14.04安装Thinkphp
    ubuntu,scrapy安装
    ubuntu,sublime text 3中文输入的问题
    ubuntu安装beatifulsoup,pip,creepy
    ubuntu,系统设置无法打开
    Ubuntu14.04安装完成的基本配置
    在Sublime Text 3中添加snippet
    领航工作室启用新域名啦!
  • 原文地址:https://www.cnblogs.com/wolf940509/p/5349448.html
Copyright © 2020-2023  润新知