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
原文地址:https://www.cnblogs.com/wolf940509/p/5349448.html