题目链接:传送门

显然是 dp。
令 d p [ i ] dp[i] dp[i]表示分解 i i i的方案数。
考虑怎样推出 d p [ i ] dp[i] dp[i]:
若 i i i为奇数,则 i i i的分解式中必然有一个1。
若减去这个1,则变为 i − 1 i-1 i−1的分解式。
任意 i − 1 i-1 i−1的分解式后+1,则变为 i i i的分解式。
因此 i i i的分解方案与 i − 1 i-1 i−1的分解方案是一一对应的。
所以 d p [ i ] = d p [ i − 1 ] dp[i]=dp[i-1] dp[i]=dp[i−1]。

若 i i i为偶数,则有两种情况:分解方案中有1和没有1。
如果有1,则1的数量至少有2个。
减去这两个1,发现变为了 i − 2 i-2 i−2的分解。
若没有1,则分解式中的所有数均为2的倍数。
所以把所有数都除以2,变为了 i 2 \frac{i}{2} 2i​的分解。
因此 d p [ i ] = d p [ i − 2 ] + d p [ i / 2 ] dp[i]=dp[i-2]+dp[i/2] dp[i]=dp[i−2]+dp[i/2]。

代码:

#include<stdio.h>
#include<cstring>
#include<algorithm>
#define re register int
using namespace std;
typedef long long ll;
int read() {re x=0,f=1;char ch=getchar();while(ch<'0' || ch>'9') {if(ch=='-')  f=-1;ch=getchar();}while(ch>='0' && ch<='9') {x=10*x+ch-'0';ch=getchar();}return x*f;
}
ll fastpow(ll b,ll p,ll k) {ll ans=1;while(p) {if(p&1) ans=ans*b%k;b=b*b%k;p>>=1;}return ans;
}
const int Size=1000005;
const ll mod=1e9;
ll n,dp[Size];
int main() {n=read();dp[0]=dp[1]=1;for(re i=2; i<=n; i++) {if(i&1) {dp[i]=dp[i-1];} else {dp[i]=(dp[i-2]+dp[i>>1])%mod;}}printf("%lld",dp[n]);return 0;
}

POJ2229 [USACO05 Jan] Sum sets 递推(dp)相关推荐

  1. 解题报告:luogu P2272 [ZJOI2007]最大半连通子图(tarjan缩点、递推DP、hash、set判重)

    这时yxc上课时讲解的截图. 一般用到tarjan算法的题目步骤都非常相似: tarjan算法 缩点,建图(这里要判重) 按照拓扑序递推(这里缩点以后逆向就已经是拓扑序了)/ 循环遍历新图求解答案. ...

  2. 2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)

    整理的算法模板合集: ACM模板 题目传送门 三段题面,只有第三段是有用的-前两段又长单词又难懂,就是在讲故事...不过针对四种情况给出四个图帮助我们理解题意是真的赞,可能出题人怕我们看不懂吧(第一句 ...

  3. hdu1978(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1978 分析: 递推DP. dp[][]表示可以到达改点的方法数. 刚开始: 外循环扫描所有点dp[x] ...

  4. 递推DP URAL 1119 Metro

    题目传送门 1 /* 2 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 3 递推DP:仿照JayYe,处理的很巧妙, ...

  5. 递推DP HDOJ 5459 Jesus Is Here

    题目传送门 题意:简单来说就是sn = sn-1 + sn-2递推而来,求其中所有c字符的:∑i<j:sn[i..i+2]=sn[j..j+2]=''cff"(j−i) mod 530 ...

  6. 递推DP UVA 1366 Martian Mining

    题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题, ...

  7. POJ 1661 Help Jimmy(递推DP)

    思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...

  8. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

    题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...

  9. [DFS/递推/DP] 2327 [SCOI2005] 扫雷 ( 普及+/提高

    Date:2019/10/13 Degree of difficulty:Universal Original question:P2327 [SCOI2005]扫雷 原题与改编 10.13月考[爆零 ...

最新文章

  1. Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)
  2. MT7628/MT7688 修改串口2作为调试串口 所踩的坑
  3. 这三位同学的名字绝了!笑得肚子疼......
  4. php mysql int 日期格式化 string,MYSQL int类型字段的时间存放和显示 和 php的时间存放函数...
  5. 【OpenCV 例程200篇】02. 图像的保存(cv2.imwrite)
  6. ZooKeeper Internals -- ZooKeeper内部工作方式
  7. 下一版本的Android OS ——Jelly Bean
  8. LeetCode93. 复原IP地址
  9. mysql高级管理-note
  10. 旅游信息管理系统的设计与实现
  11. ISO 9001质量管理体系标准概述
  12. qt plugins 插件框架
  13. vant附带样式去除
  14. 自己做的本地识图软件DAMO_嗅图狗
  15. sklearn中shuffle的用法
  16. KylinV10上qt5.9开发应用打包步骤(四)--linuxdeployqt源码编译
  17. 太白山北坡旅游路线登顶攻略
  18. java下载网站图片代码_java下载网上的图片到本地
  19. gitlab ip变更runner拉取代码失败、shell启动springboot项目启动起来。
  20. windo10系统哪个版本运行最快呢?

热门文章

  1. CultureInfo 类
  2. 拼多多获得搜索词推荐 API
  3. python 遍历函数用法_python中enumerate函数遍历元素用法分析
  4. Autocad提示产品许可证错误无法激活的解决办法
  5. 交易猫 转转 闲鱼后台源码
  6. python-学习笔记-07
  7. 高等数学-曲线积分与曲面积分
  8. win7u盘内容在计算机右侧,帮您恢复win7系统取消插入U盘后计算机窗口右侧显示U盘内容的技巧介绍...
  9. C语言小练习——约瑟夫环问题
  10. 开源企业网盘选型(完善中)