题目1084:整数拆分 (递推)

题意:

问一个数拆分成2的幂的和的方法数有多少种。

我是先通过找列举前面的找规律

n   种数

1    1

2    2

3    2

4    4

5    4

6    6

7    6

8    10

9    10

10   14

……

 1 #include<stdio.h>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #include<cmath>
 7 #include<vector>
 8 #include<queue>
 9 #include<map>
10 #include<set>
11
12 using namespace std;
13
14 typedef long long ll;
15
16 const int mod = 1000000000;
17 int f[1000010];
18
19 void init()
20 {
21     f[1] = 1;
22     for(int i=2;i<=1000000;i++)
23     {
24         if(i&1) f[i] = f[i-1]%mod;
25         else f[i] = (f[i-1]+f[i/2])%mod;
26     }
27 }
28
29 int main()
30 {
31     int n;
32     init();
33     while(~scanf("%d",&n))
34     {
35         printf("%d\n",f[n]);
36     }
37     return 0;
38 }

时间: 2024-08-28 18:01:46

题目1084:整数拆分 (递推)的相关文章

九度[1084]整数拆分

1 #include <iostream> 2 3 using namespace std; 4 5 int dp[1000001]; 6 7 int main() { 8 int n; 9 while (cin >> n) { 10 dp[1] = 1; 11 dp[2] = 2; 12 for (int i = 3; i <= n; ++i) { 13 if (i % 2 == 1) 14 dp[i] = dp[i - 1]; 15 else 16 dp[i] = dp[

uva11258- String Partition(递推)

题目:uva11258- String Partition(递推) 题目大意:给出一系列的数字,它是由很多int型的数构成的,就是中间没有加空格.所以现在问怎样拆分这些数,使得这些数之和最大. 解题思路:这里要求是int型的整数,单个数的最大的值2147483647.dp[i][j]代表这个数字串第i个字符到第j个字符能够得到的最大的和. dp[i][j] = max(dp[i][i + k] + dp[i + k + 1][j]) k >= 0 && k <= j - i -

一道简单的递推题(快速幂+矩阵乘法优化+滚动数组)

问题 F: 一道简单的递推题 时间限制: 1 Sec  内存限制: 128 MB提交: 546  解决: 48[提交][状态][讨论版] 题目描述 存在如下递推式: F(n+1)=A1*F(n)+A2*F(n-1)+...+An*F(1) 求第K项的值对1000000007取模的结果 输入 单组测试数据 第一行输入两个整数 n , k (1<=n<=100,n<k<=10000000000) 第二行输入 n 个整数 F(1)   F(2)   ...   F(n) 第三行输入 n

(hdu step 3.1.3)母牛的故事(简单递推)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 659 Accepted Submission(s): 481   Problem Descriptio

(hdu step 3.1.2)骨牌铺方格(简单递推:求用2*1的骨牌铺满2*n的网格的方案数)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 744 Accepted Submission(s): 478   Problem Descriptio

(hdu step 3.1.1)超级楼梯(简单递推:从第1级到第m级有多少种走法,每次只能走一步或两步)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 652 Accepted Submission(s): 483   Problem Description

递推 Codeforces Round #186 (Div. 2) B. Ilya and Queries

题目传送门 1 /* 2 递推:用cnt记录前缀值,查询区间时,两个区间相减 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 #include <cstring> 8 using namespace std; 9 10 const int MAXN = 1e5 + 10; 11 const int INF = 0x3f3f3f3f; 12 char s[MAXN]; 1

Coconuts, Revisited(递推+枚举+模拟)

Description The short story titled Coconuts, by Ben Ames Williams, appeared in the Saturday Evening Post on October 9, 1926. The story tells about five men and a monkey who were shipwrecked on an island. They spent the first night gathering coconuts.

uva11151Longest Palindrome(递推)

题目;uva11151Longest Palindrome(递推) 题目大意:给出一个字符串,问它可以通过去掉些字符得到的最长的回文的长度. 解题思路:dp[i][j]代表从字符串i位到j位最长的回文的长度. 如果s[i] == s[j] , dp[i][j] = dp[i - 1][j - 1] + 2: 因为头尾相同,那么要求i到j的最长的回文的话,只有可能是中间的部分最长的回文加上2. 否则dp[i][j] = Max (dp[i][j - 1], dp[i + 1][j]): 计算顺序: