Bzoj4521 [Cqoi2016]手机号码
Submit: 557 Solved: 335
Description
Input
Output
输出文件内容只有一行,为1个整数,表示满足条件的手机号数量。
Sample Input
Sample Output
样例解释
满足条件的号码: 12121285000、 12121285111、 12121285222、 12121285333、 12121285550
动态规划 数位DP
挺简单的数位DP。我居然还记得数位DP怎么写,真是感动。
第30行重置line(连续数字数)的时候应该重置成1,打成0半天没看出来
有一个坑点:L是10000000000的时候,-1再calc()会出错。
↑本来应该卡不住我DFS写法的,但我为了解决前导0问题在25行设了个st,这就喜闻乐见跳坑了
特判就好
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 #include<vector> 7 #define LL long long 8 using namespace std; 9 const int mxn=13; 10 int dig[mxn],len=0; 11 LL f[mxn][mxn][mxn][2][2][2][2]; 12 LL DFS(int now,int last,int line,bool ha,bool yo,bool mi,bool flag){ 13 //当前位置 上一位数 连续数量 8 4 三连 上界 14 if(!flag && f[now][last][line][ha][yo][mi][flag]!=-1)return f[now][last][line][ha][yo][mi][flag]; 15 if(ha&yo)return 0; 16 // printf("now:%d last:%d line:%d %d %d %d\n",now,last,line,ha,yo,mi); 17 if(!now){ 18 if(mi)return 1; 19 return 0; 20 } 21 LL &dp=f[now][last][line][ha][yo][mi][flag]; 22 LL res=0; 23 int lim=flag?dig[now]:9; 24 int st; 25 if(now==len)st=1;else st=0; 26 for(int i=st;i<=lim;i++){ 27 bool Nflag=flag&(i==lim); 28 bool Nha=ha|(i==8); 29 bool Nyo=yo|(i==4); 30 int Nline= (i==last)?line+1:1; 31 bool Nmi=mi|(Nline>=3?1:0); 32 res+=DFS(now-1,i,Nline,Nha,Nyo,Nmi,Nflag); 33 } 34 dp=res; 35 return res; 36 } 37 LL calc(LL x){ 38 // memset(f,-1,sizeof f); 39 len=0; 40 while(x){ 41 dig[++len]=x%10; 42 x/=10; 43 } 44 return DFS(len,-1,0,0,0,0,1); 45 } 46 LL L,R; 47 int main(){ 48 int i,j; 49 scanf("%lld%lld",&L,&R); 50 memset(f,-1,sizeof f); 51 LL ans=0; 52 if(L==10000000000)ans=calc(R); 53 else ans=calc(R)-calc(L-1); 54 printf("%lld\n",ans); 55 return 0; 56 }
转载于:https://www.cnblogs.com/SilverNebula/p/6711279.html
Bzoj4521 [Cqoi2016]手机号码相关推荐
- [BZOJ4521][Cqoi2016]手机号码 (数位dp)
题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号码单独出售.为了便于前 ...
- BZOJ4521: [Cqoi2016]手机号码
Description 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不 吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号 码单 ...
- [CQOI2016]手机号码 数位DP
[CQOI2016]手机号码 用来数位DP入门,数位DP把当前是否需要限制取数范围(是否正在贴着临界值跑,即下面的limited)和一切需要满足的条件全部塞进记忆化搜索参数里面就好了,具体情况转移便好 ...
- P4124 [CQOI2016]手机号码
链接:https://www.luogu.org/problemnew/show/P4124 题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等 ...
- 【洛谷P4124】[CQOI2016]手机号码
手机号码 数位DP模板题 记忆化搜索: #include<iostream> #include<cstring> #include<cstdio> using na ...
- [SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]
DP专练博客 DP专练 T1:最大子矩阵 题目 题解 代码实现 T2:守卫 题目 题解 代码实现 T3:手机号码 题目 题解 代码实现 T1:最大子矩阵 题目 这里有一个n*m的矩阵,请你选出其中k个 ...
- 【题解】P4124 [CQOI2016]手机号码
\(Desciption:\) 给出区间 \([L,R]\) ,求区间内满足没有 \(4\) 和 \(8\) 同事出现并且一定要有三位连续的相同. 并且一定是十一位的电话号码. \(Sample\) ...
- 【BZOJ4521】手机号码,数位dp
传送门 思路: 并不困难但是我写的很毒瘤... 主要是来练习一下潇爷(Timemachine)好写的数位dp方法 多加一维0/1状态来记录从当前位起的后缀与dp数的当前位起的后缀的大小关系,小于等于就 ...
- [CQOI2016]手机号码
嘟嘟嘟 这题一看就是数位dp. 我写数位dp,一般是按数位dp的格式写一个爆搜,然后加一点记忆化. 不过其实我一直不是很清楚记忆化是怎么加,感觉就是把dfs里的参数都扔到dp数组里,好像很暴力啊. 这 ...
最新文章
- c语言代码,输入两个数,输出第一个数到第二个数之间所有的数
- cookie JS验证码
- hibernate的native sql查询
- 成功解决没有tf.nn.rnn_cell属性
- 花花酱leetcode 题目——搜索专题
- centos6中office及中文输入法安装 (转载)
- android学习笔记---38_采用广播接收者拦截外拔电话,实现原理以及实例源码
- dos创建mysql数据库_用命令创建MySQL数据库
- 2020数学建模B题
- linux系统chmod 755权限
- 7行代码让B站崩溃3小时,竟因“一个诡计多端的0”
- eSPI自学笔记(一):前言和简介
- php环境下,两种汇率接口,已经测试通过
- web前端开发分享js进阶篇
- 音视频格式大全:stream type
- BUG处理:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path buil
- IDEA输入英文符号间隔大
- 【Python】绘制热力图seaborn.heatmap,cmap设置颜色的参数
- 前端工作随笔日记 Day01
- 解决IntelliJ IDEA创建Maven项目没有src目录的问题
热门文章
- React Navigation 路由导航库升级 5.x
- 【Linux】Ubuntu 20.04 安装NVIDIA驱动 + CUDA + CUDNN
- 研发部技术方向-物联网平台、大数据、人工智能
- 校招末班车 — 记我的爱奇艺测试开发工程师面试之旅
- Proteus 实现一百分钟倒计时计数器
- POJ3660 - Cow Contest - 关系传递闭包(最短路变形)+思维
- 三级网络技术_局域网技术
- Aeraki Mesh 正式成为CNCF沙箱项目,腾讯云携手合作伙伴加速服务网格成熟商用
- docker学习2--centos7下安装
- Java基础_关键字