### 洛谷 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 表示前一位数位上的数,还需要再加 flag 标记是否当前已满足 ppre == pre == i
3、剩下的就是前导零与位数限制标记了 (即 lead 与 limit )

故 dp 需要 5 维,pos、ppre、pre、flag、q、w ,然后直接记忆化即可。

代码如下:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long ll;
ll L,R;
ll a[];
ll dp[][][][][][];
ll dfs(int pos,int ppre,int pre,bool flag,bool q,bool w,bool lead,bool limit){
if(pos==) return flag&&(!(q&&w));
if(!limit&&dp[pos][ppre][pre][flag][q][w]!=-) return dp[pos][ppre][pre][flag][q][w];
int up=limit?a[pos]:;
ll res=;
for(int i=;i<=up;i++){
if(lead&&i==) res+=dfs(pos-,-,-,false,false,false,true,limit&&i==a[pos]);
else res+=dfs(pos-,pre,i,(ppre==pre&&pre==i)||flag,(q||i==),(w||i==),false,limit&&i==a[pos]);
}
if(!limit) dp[pos][ppre][pre][flag][q][w]=res;
return res;
}
ll solve(ll x)
{
int pos=;
while(x){
a[++pos]=x%;
x/=;
}
return dfs(pos,-,-,,false,false,true,true);
}
int main()
{
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
memset(dp,-,sizeof(dp));
scanf("%lld%lld",&L,&R);
printf("%lld\n",solve(R)-solve(L-) );
}

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

  1. 洛谷教主花园dp

    洛谷-教主的花园-动态规划   题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ...

  2. 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp

    洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...

  3. 【洛谷P4124】[CQOI2016]手机号码

    手机号码 数位DP模板题 记忆化搜索: #include<iostream> #include<cstring> #include<cstdio> using na ...

  4. [洛谷P4124][CQOI2016]手机号码

    题目大意:给你两个$l,r$,求出$[l,r]$中符合要求的数,要求为至少有$3$个相邻的相同数字,且不可以同时出现$8$和$4$ 题解:数位$DP$ 卡点:无 C++ Code: #include ...

  5. 洛谷 P4124 [CQOI2016]手机号码

    题意简述 求l~r之间不含前导零,至少有三个相邻的相同数字,不同时含有4和8的11位正整数的个数 题解思路 数位DP,注意在l,r位数不够时补至11位 代码 #include <cstdio&g ...

  6. 洛谷P4719 动态dp

    动态DP其实挺简单一个东西. 把DP值的定义改成去掉重儿子之后的DP值. 重链上的答案就用线段树/lct维护,维护子段/矩阵都可以.其实本质上差不多... 修改的时候在log个线段树上修改.轻儿子所在 ...

  7. 2018普及组摆渡车洛谷5017(dp做法)

    啦啦啦,这一篇是接上一篇的博客,上一篇是记忆化搜索,而这一篇是dp+前缀和小技巧 dp这种玄学做法我这种蒟蒻当然不是自己想出来的,参考https://blog.csdn.net/kkkksc03/ar ...

  8. 洛谷P3975 跳房子 [DP,单调队列优化,二分答案]

    题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一 ...

  9. 洛谷1373(dp)

    常规线性dp,需要时就加一维.\(dp[i][j][t][s]\)表示在点\((i,j)\)时瓶子里剩\(t\)且为\(s\)走(0代表小a,1代表uim)时的方案数. de了半天发现是初次尝试的快速 ...

随机推荐

  1. sqlplus登录时密码有特殊符号解决方法

    偶然百度得到解决方法,在查看了公司有的脚本使用了这种解决方式,特记录下来,有需要的可以点击文末的链接查看原文. 本文转载https://www.cnblogs.com/lhrbest/p/656090 ...

  2. 关于web.xml配置的那些事儿

    参考文章:重新认识web.xml

  3. Java.awt.geom.AffineTransform 的使用

    https://docs.oracle.com/javase/8/docs/api/java/awt/geom/AffineTransform.html http://www.cjsdn.net/Do ...

  4. 带有Spring Boot和MySQL的Docker:简介(Part 1)

    通过优锐课java学习分享中,我们看一下带有Spring Boot和MySQL的Docker教程.非常实用,分享给大家参考学习. Docker是一种技术,开发人员或DevOps团队可以使用容器来构建, ...

  5. 20191217-关于JPA @Query查询数据一直为空,直接在数据库里执行SQL则可以查出来

    20191217-关于JPA @Query查询数据一直为空,直接在数据库里执行SQL则可以查出来 前提:数据库中查询,由于在视图中无主键概念,只是在代码中由逻辑主键.结果:数据中作为逻辑主键中有个字段 ...

  6. jupyter notebook改变行间图片大小

    jupyter notebook使用起来代码效果很直接,这是我最喜欢的一点,但是主题单一,后来改了一下主题.也可以接受了,但是还有一个问题是显示图片太小我们可以用两个方法来改变它. 一.可以通过rcP ...

  7. linux命令-开关机命令与系统痕迹命令

    一.关机和重启命令 1.sync 命令 命令名称:sync 英文原意:flush file system buffers 所在路径:/bin/sync 执行权限:所有用户 功能描述:刷新文件系统缓冲区 ...

  8. SPARQL入门(一)SPARQL简介与简单使用

      知识图谱(Knowledge Graph)是当前互联网最炙手可热的技术之一,它的典型应用场景就是搜索引擎,比如Google搜索,百度搜索.我们在百度搜索中输入问题"中国银行的总部在哪&q ...

  9. ETCD:配置参数

    原文地址:Configuration flags etcd通过配置文件,多命令行参数和环境变量进行配置, 可重用的配置文件是YAML文件,其名称和值由一个或多个下面描述的命令行标志组成.为了使用此文件 ...

  10. idea从mapper接口跳到xml文件