凭感觉,要计算区间 [ L , R ] [L,R] [L,R]这些而且数目很大的,对数字位数有限制的,我们会考虑数位dp的模型
考虑状态 d p ( c u r , t o p , p r e 1 , p r e 2 , s t 1 , s t 2 ) dp(cur,top,pre1,pre2,st1,st2) dp(cur,top,pre1,pre2,st1,st2)
分别表示考虑到第 c u r cur cur个位置,是否贴着上界 t o p top top,前一个是 p r e 2 , 前两个是 p r e 1 pre2,前两个是pre1 pre2,前两个是pre1,是否已经满足条件1出现了3次相邻相同数字 s t 1 st1 st1 和 s t 2 = 0 既不包含 8 和 4 , s t 2 = 1 只包含 8 , s t 2 = 3 只包含 4 和st2=0既不包含8和4,st2=1只包含8,st2=3只包含4 和st2=0既不包含8和4,st2=1只包含8,st2=3只包含4.
然而以上状态并不能正确地通过测试,因为状态设计的并不正确,因为有重叠的部分.
就是说 s t 2 = 0 st2=0 st2=0包含的状态是既不包含4与8的数字
而 s t 2 = 1 , 是不包含 4 但是包含 8 st2=1,是不包含4但是包含8 st2=1,是不包含4但是包含8,也就是说这种情况我们必须要选一个8,不然就会进入 s t 2 = 0 的情况 st2=0的情况 st2=0的情况,同理 s t = 2 st=2 st=2也必须要选一个 4 4 4.
既然这样,我们转换一下 d p dp dp含义
d p ( c u r , t o p , p r e 1 , p r e 2 , s t 1 , a p 4 , a p 8 ) dp(cur,top,pre1,pre2,st1,ap4,ap8) dp(cur,top,pre1,pre2,st1,ap4,ap8): 选了第 c u r 个数字 , 是否贴着上界 t o p , 前 2 个数字是 p r e 1 , 前个数字是 p r e 2 , 是否出现过数字 a p 4 选了第cur个数字,是否贴着上界top,前2个数字是pre1,前个数字是pre2,是否出现过数字ap4 选了第cur个数字,是否贴着上界top,前2个数字是pre1,前个数字是pre2,是否出现过数字ap4
是否出现过数字 a p 8 是否出现过数字ap8 是否出现过数字ap8
注意不要第一位选0
狗啊,这题目还包含输入是10个,数字的情况,所以我们要特判掉

/*
You held me down but I broke free,
I found the love inside of me.
Now I don't need a hero to survive
Cause I already saved my life.
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 15;
const int INF = 1e9+7;
typedef long long ll;
typedef pair<int,int> pii;
#define all(a) (a).begin(), (a).end()
#define pb(a) push_back(a)
ll dp[maxn][2][11][11][2][2][2];
int a[maxn];int len;
ll dfs(int cur,bool top,int pre1,int pre2,bool st1,bool ap4,bool ap8){if(!cur){if(ap4&&ap8) return 0;if(st1==0) return 0;return 1;}ll &ans = dp[cur][top][pre1][pre2][st1][ap4][ap8];if(ans!=-1) return ans;ans = 0;int bound = top ? a[cur] : 9;for(int i=0;i<=bound;i++){if(i==0&&cur==len) continue;bool ok = (pre1==pre2&&pre2==i);ans += dfs(cur-1,top&&(i==bound),pre2,i,(ok||st1),(ap4||(i==4)),(ap8||(i==8)));}return ans;
}
ll solve(ll n){memset(dp,-1,sizeof(dp));len = 0;while(n) a[++len] = n%10,n/=10;if(len==10) return 0;return dfs(len,1,10,10,0,0,0);
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);ll L,R;cin>>L>>R;cout<<solve(R)-solve(L-1);
}

洛谷P4124 [CQOI2016]手机号码相关推荐

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

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

  2. P4124 [CQOI2016]手机号码

    链接:https://www.luogu.org/problemnew/show/P4124 题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等 ...

  3. 【题解】P4124 [CQOI2016]手机号码

    \(Desciption:\) 给出区间 \([L,R]\) ,求区间内满足没有 \(4\) 和 \(8\) 同事出现并且一定要有三位连续的相同. 并且一定是十一位的电话号码. \(Sample\) ...

  4. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  5. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  6. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  7. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  8. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  9. 洛谷P1417 烹调方案

    洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...

最新文章

  1. 英伟达推出Super显卡,老黄再现精准“刀法”,网友:都是被AMD逼的
  2. 编写android服务
  3. Handle In-Day Changes
  4. British Journal of Management
  5. 《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法
  6. 物联网(车联网)平台架构方案
  7. 一款粉笔最近火了 世界各国数学家为什么集体囤粉笔
  8. 电脑太慢了最简单的办法怎么弄_修电脑不求人—最实用办公室电脑故障及解决办法,办公室人都说好...
  9. OAUI前台设计(二)
  10. 《从零开始的RPG游戏制作教程》前言
  11. Linux命令:查看服务器IP地址
  12. 流式上传文件到服务器磁盘,通过HTTP将数据从浏览器流式传输到服务器的方法...
  13. 流年暗换,是什么偷走了我们的爱情
  14. adb shell get/setprop, setenforce...
  15. 黑丝,白丝,全都要。某站的视频爬取加合成
  16. 如何卸载Visio秘钥
  17. Microsoft Office Visio 缺失安装文件的解决方法(附viso安装密钥)
  18. 原生js中attributes属性
  19. linux的mount bind命令
  20. CmsTop 大众版运行环境搭建 (CentOS+Nginx+PHP FastCGI)

热门文章

  1. 各分辨率图片生成神器
  2. 同济大学计算机考研书,同济大学计算机技术(专业学位)考研参考书目
  3. eps矢量图在word中的使用
  4. [UVM]UVM Component之Subscriber
  5. 计算机软件著作权登记常识
  6. 掌上实验室V8系列教程(三)数码管动态显示
  7. 人工智能(二)——决策树算法
  8. Unity初级项目实战:官方宇宙飞机大战游戏(二)
  9. MariaDB 视图与触发器
  10. SAP EPIC 银企直连 付款接口(建设银行)