BZOJ 4521 手机号码
SB数位dp.
我的貌似要特判9999999999的情况。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long l,r,dp[][][][][][],ret=,bit[];
void reset()
{
for (long long i=;i<=;i++)
for (long long j=;j<=;j++)
for (long long k=;k<=;k++)
for (long long l=;l<=;l++)
for (long long a=;a<=;a++)
for (long long b=;b<=;b++)
dp[i][j][k][l][a][b]=-;
}
void get_bit(long long x)
{
ret=;
while (x) {bit[++ret]=x%;x/=;}
}
long long dfs(long long pos,long long cnt,long long num,long long f,long long f1,long long f2,bool flag)
{
if (!pos) return f;
if ((!flag) && (dp[pos][cnt][num][f][f1][f2]!=-)) return dp[pos][cnt][num][f][f1][f2];
long long ans=,up=flag?bit[pos]:,tc;
for (long long i=;i<=up;i++)
{
if ((i==) && (f2)) continue;
if ((i==) && (f1)) continue;
if (i==num) tc=min(cnt+,3LL);else tc=;
ans+=dfs(pos-,tc,i,f|(tc==),f1|(i==),f2|(i==),flag&&(i==up));
}
if (!flag) dp[pos][cnt][num][f][f1][f2]=ans;
return ans;
}
long long ask(long long x)
{
get_bit(x);
if (x==9999999999LL) return dfs(ret,,,,,,);
else return dfs(ret,,-,,,,);
}
int main()
{
scanf("%lld%lld",&l,&r);reset();
printf("%lld\n",ask(r)-ask(l-));
return ;
}
BZOJ 4521 手机号码的更多相关文章
- BZOJ 4521 CQOI 2016 手机号码 数位DP
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 539 Solved: 325[Submit][Status ...
- bzoj 4521 [ Cqoi 2016 ] 手机号码 —— 数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4521 数位DP,记录好多维状态: 写了半天,复杂得写不下去了,于是参考一下TJ... 练习简 ...
- bzoj 4521 [Cqoi2016]手机号码——数位dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4521 dfs真好用~ #include<iostream> #include&l ...
- BZOJ 4521 [CQOI2016]手机号码 - 数位DP
Description 在$[L, R]$找出有几个数满足两个条件 : 1 : 不同时含有$4$ 和 $8$ 2 : 至少有$3$个相邻的数相同 Solution 非常容易的数位DP, $pos$ 为 ...
- bzoj 4521: [Cqoi2016]手机号码
感觉get到了一种数位dp的新姿势,加一位表示当前要填的数有没有限制(感觉以前的写法都太蠢了). 这么写有两个地方要注意: 1.每dp到一位时需要f[i][初始状态]++,相当于这位前都是前导零(这道 ...
- bzoj 4521: [Cqoi2016]手机号码【数位dp】
比较基础的数位dp,dfs的时候带上上一位,上上位,是否已经有连续3个相同位,是否有4,是否有8即可 但是要注意两点(在洛谷上一直70) 当l=1e10的时候,直接输出clc(r)即可,因为如果再减去 ...
- bzoj 4521 电话号码
题目大意: 求$[L,R]$中,满足不同时存在4和8且有连续三个一样的个数 思路: 我为什么要记忆化搜索里带-1啊 我可真是个** 直接记忆化搜索记前两位是否有4,8以及是否满足连续 #include ...
- My_Plan part1 小结
数位DP AC十道题目以上 成就达成 八月份!三个月!想想就令人兴奋呢 开始写总结啦 貌似简单的数位DP只需要改改模板就可以啦 就按照我的做题顺序开始总结吧 先是学习了一发模板:http://www. ...
- 4521: [Cqoi2016]手机号码
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1030 Solved: 609 [Submit][Statu ...
随机推荐
- 关于BP网络的一些总结
背景 前段时间,用过一些模型如vgg,lexnet,用于做监督学习训练,顺带深入的学习了一下相关模型的结构&原理,对于它的反向传播算法记忆比较深刻, 就自己的理解来描述一下BP网络. 关于BP ...
- ws_ webpack+reactjs+redux+nodejs认识
/** * Created by yangpu on 2016/9/18. */ //环境安装方法1.npm install //加载依赖模块2.npm run build //打包没有压缩,开发环境 ...
- ARM+LINUX 项目学习总结
一.确定功能 二.系统移植 1. 根据具体板子修改u-boot (三星的开发板资料) 2. 根据具体板子和功能修改内核 (基本的驱动) 3. 移植busybox 三.驱动修改编写 四.应用编程 附1 ...
- 学习iOS
最近想学习一下iOS开发,不过一点基础都没有,得先从熟悉object-C语法开始,在此把学习中的一些知识点作为记录. mac pro常用操作 学习ios[1]Objective-C 基本语法 学习io ...
- Android开发--Adapter的应用
1.简介 Adapter的作用是为GridView,ListView等界面控件与数据之间搭建桥梁,每当列表里的每一项显示到页面时,都会调用到Adapter的getView方法 返回一个View.在An ...
- .NET小细节
1.equals()和运算符==的区别 C#中有两种不同的相等:引用相等和值相等.值相等是两个对象包含相同的值:引用相等是两个对象引用的是同一个对象. “==”操作符比较的是两个变量的值是否相等,或两 ...
- django orm总结[转载]
django orm总结[转载] 转载地址: http://www.cnblogs.com/linjiqin/archive/2014/07/01/3817954.html 目录1.1.1 生成查询1 ...
- PHP多条件搜索ShopNc实例
控制器部分代码: if (trim($_GET['keyword']) != '') { //echo $_GET['search_type']; exit(); switch ($_GET['sea ...
- Android调用系统照相机
ndroid调用系统相机实现拍照功能 在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题. 虽然之前看过android开发的书,但是没 ...
- 项目中常用的linux命令
1. du -sm * | sort -n 把当前目录下的文件(或目录)按大小排序,看下哪个地方占用最多: 2. pwd 获取当前目录路径 3. tail -f ...