洛谷 P4124 (数位 DP)】的更多相关文章

### 洛谷 P4124 题目链接 ### 题目大意: 给你一段区间,让你求满足下列两个条件时的数的个数. 1.至少有 3 个相邻相同数字 (即 111 .1111 .222 等) 2.不能同时出现 8 与 4 . 给定的区段 [L,R] 中 ,L 与 R 的数值范围为:1010 ≤ L ≤ R  < 1011 分析: 1.用 q 与 w 标记 8 是否出现 ,4 是否出现. 2.为了得知是否有连续三个相等,故还需要 ppre 表示前两位中的第一位数位上的数,pre 表示前一位数位上的数,还需要…
洛谷-教主的花园-动态规划   题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树的高度分别为10,20,30.教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高. 输入输出格式 输入格式: 输入文件garden.in的第1行为一个正整数n,表示需要…
洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 (说是期望dp,不如说是期望递推?) 另外,本题用到了模意义下的除法变乘法,这也是一个基础但重要的概念 1 算法分析 part 1 我们先来考虑\(m=0\)的情况,也就是说所有的胖头鱼都带有圣盾 \(f[i]\)表示有\(i\)条圣盾胖头鱼时的期望伤害次数,我们先击破一条胖头鱼的圣盾 变成\(i-1…
手机号码 数位DP模板题 记忆化搜索: #include<iostream> #include<cstring> #include<cstdio> using namespace std; #define int long long ],dp[][][][][][]; int dfs(int len,bool ok,int last,bool same,bool four,bool eight,bool shangxian)//剩余的位数,是否已经有三个连续相同的数字,…
题目大意:给你两个$l,r$,求出$[l,r]$中符合要求的数,要求为至少有$3$个相邻的相同数字,且不可以同时出现$8$和$4$ 题解:数位$DP$ 卡点:无 C++ Code: #include <cstdio> #include <algorithm> long long l, r; int num[13], tot; long long f[13][4][2][2][11]; long long calc(int x, int lim, int lead, int had4…
题意简述 求l~r之间不含前导零,至少有三个相邻的相同数字,不同时含有4和8的11位正整数的个数 题解思路 数位DP,注意在l,r位数不够时补至11位 代码 #include <cstdio> #include <cstring> typedef long long ll; int cnt; int num[20]; ll l, r; ll dp[20][2][10][10][2][2]; bool _4, _8, _f; ll dfs(int len, int p1, int p…
动态DP其实挺简单一个东西. 把DP值的定义改成去掉重儿子之后的DP值. 重链上的答案就用线段树/lct维护,维护子段/矩阵都可以.其实本质上差不多... 修改的时候在log个线段树上修改.轻儿子所在重链的线段树的根拿去更新父亲的DP值. #include <cstdio> #include <algorithm> , INF = 0x3f3f3f3f; template <class T> inline void read(T &x) { x = ; char…
啦啦啦,这一篇是接上一篇的博客,上一篇是记忆化搜索,而这一篇是dp+前缀和小技巧 dp这种玄学做法我这种蒟蒻当然不是自己想出来的,参考https://blog.csdn.net/kkkksc03/article/details/84798228 首先定义f[i],表示在时间i已积累的最小等待时间,因为时间范围是<=4*10^6,所以不会炸.定义cnt[i]表示到i时刻时已经到达的人数(包括被车送走的),sum[i]表示到i时刻时到达车站的同学的时间的总和,然后就可推出转移方程:f[i]=min(…
题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上.每个格子内有一个数字(整数),表示到达这个 格子能得到的分数.玩家第一次从起点开始向右跳,跳到起点右侧的一个格子内.第二次再从当前位置继续向右跳,依此类推.规则规定: 玩家每次都必须跳到当前位置右侧的一个格子内.玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和. 现在小…
常规线性dp,需要时就加一维.\(dp[i][j][t][s]\)表示在点\((i,j)\)时瓶子里剩\(t\)且为\(s\)走(0代表小a,1代表uim)时的方案数. de了半天发现是初次尝试的快速取模少写个等号--然鹅改了以后为什么比正常写跑得慢-- #include <cstdio> const int mod = 1e9 + 7; int n, m, k, ans; int a[805][805], dp[805][805][20][2]; void add(int &x, i…