首页 > 其他 > 详细

4月3日

时间:2016-04-03 11:39:06      阅读:294      评论:0      收藏:0      [点我收藏+]

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

 

4月3日

原文:http://www.cnblogs.com/wolf940509/p/5349448.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!