POJ2229 [USACO05 Jan] Sum sets 递推(dp)
题目链接:传送门
显然是 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)相关推荐
- 解题报告:luogu P2272 [ZJOI2007]最大半连通子图(tarjan缩点、递推DP、hash、set判重)
这时yxc上课时讲解的截图. 一般用到tarjan算法的题目步骤都非常相似: tarjan算法 缩点,建图(这里要判重) 按照拓扑序递推(这里缩点以后逆向就已经是拓扑序了)/ 循环遍历新图求解答案. ...
- 2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)
整理的算法模板合集: ACM模板 题目传送门 三段题面,只有第三段是有用的-前两段又长单词又难懂,就是在讲故事...不过针对四种情况给出四个图帮助我们理解题意是真的赞,可能出题人怕我们看不懂吧(第一句 ...
- hdu1978(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1978 分析: 递推DP. dp[][]表示可以到达改点的方法数. 刚开始: 外循环扫描所有点dp[x] ...
- 递推DP URAL 1119 Metro
题目传送门 1 /* 2 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 3 递推DP:仿照JayYe,处理的很巧妙, ...
- 递推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 ...
- 递推DP UVA 1366 Martian Mining
题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题, ...
- POJ 1661 Help Jimmy(递推DP)
思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...
- HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...
- [DFS/递推/DP] 2327 [SCOI2005] 扫雷 ( 普及+/提高
Date:2019/10/13 Degree of difficulty:Universal Original question:P2327 [SCOI2005]扫雷 原题与改编 10.13月考[爆零 ...
最新文章
- Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)
- MT7628/MT7688 修改串口2作为调试串口 所踩的坑
- 这三位同学的名字绝了!笑得肚子疼......
- php mysql int 日期格式化 string,MYSQL int类型字段的时间存放和显示 和 php的时间存放函数...
- 【OpenCV 例程200篇】02. 图像的保存(cv2.imwrite)
- ZooKeeper Internals -- ZooKeeper内部工作方式
- 下一版本的Android OS ——Jelly Bean
- LeetCode93. 复原IP地址
- mysql高级管理-note
- 旅游信息管理系统的设计与实现
- ISO 9001质量管理体系标准概述
- qt plugins 插件框架
- vant附带样式去除
- 自己做的本地识图软件DAMO_嗅图狗
- sklearn中shuffle的用法
- KylinV10上qt5.9开发应用打包步骤(四)--linuxdeployqt源码编译
- 太白山北坡旅游路线登顶攻略
- java下载网站图片代码_java下载网上的图片到本地
- gitlab ip变更runner拉取代码失败、shell启动springboot项目启动起来。
- windo10系统哪个版本运行最快呢?