这玩意儿还要学自己推不出来的 SX 是屑。


数位 dp,顾名思义,是根据数位做 dp,每个数位每个数位转移,炒个例子 windy 数

求 \([l, r]\),我们改成求 \(1\sim r\) 与 \(1\sim (l - 1)\) 最后二者相减。那么我们的问题就成了求 \(1\sim k\) 的 windy 数。运用 dp,数位 dp 每次从最高位往最低位填数,首先我们要知道填到第几位 \(i\)。由于是填数,但是填的数字不能超过限定范围,因此我们加一维记录前 \(i - 1\) 位是否与 \(k\) 的前 \(i - 1\) 位相同,如果相同则 \(i\) 位最多只能填到 \(k\) 的第 \(i\) 位否则能填到 \(9\),同时我们还要记录 \(i\) 是不是前导 0。

通常的数位 dp 的状态是个三元组,\(f_{i, 0/1, 0/1}\) 代表填到了 \(i\) 位与 \(k\) 的前 \(i - 1\) 位是否一致,\(i\) 是否是前导 \(0\)。这是个板子(笑)。这题我们还要加入一个 \(last\) 代表 \(i\) 的下一位填的是什么。因此我们的状态是 \(f_{i, last, 0/1, 0/1}\)。

转移应该很显然。。。用记搜,因为用迭代写起来很难受。

//SIXIANG
#include <iostream>
#include <cstring>
#define int long long
#define MAXN 100000
#define QWQ cout << "QWQ" << endl;
using namespace std;
int arr[MAXN + 10], t = 0;
void divide(int x) {
do {
arr[++t] = x % 10;
x /= 10;
} while(x);
}
int f[100][15][2][2];
int Abs(int x) {
if(x < 0) return -x;
else return x;
}
//填到第 i 位上个数是 last 前 (i - 1) 位是否与 k 相同
int windy(int i, int last, int fa, int ze) {
if(!i) return 1;
if(f[i][last][fa][ze] != -1) return f[i][last][fa][ze];
int limit = ((fa) ? arr[i] : 9);
int rest = 0;
for(int p = 0; p <= limit; p++)
if(Abs(p - last) >= 2 || ze)
rest += windy(i - 1, p, ((p == arr[i]) & fa), (ze & (!p)));
f[i][last][fa][ze] = rest;
return rest;
}
int work(int k) {
memset(f, -1, sizeof(f));
memset(arr, 0, sizeof(arr));
t = 0;
divide(k);
return windy(t, 11, 1, 1);
}
signed main() {
int l, r; cin >> l >> r;
cout << work(r) - work(l - 1) << endl;
}

数位 dp,但是做题笔记的更多相关文章

  1. SDOI2016 R1做题笔记

    SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...

  2. SAM 做题笔记(各种技巧,持续更新,SA)

    SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...

  3. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  4. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

  5. SDOI2017 R1做题笔记

    SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30

  6. SDOI2014 R1做题笔记

    SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(

  7. LCT做题笔记

    最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...

  8. java做题笔记

    java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...

  9. 计数dp做题笔记

    YCJS 3924 饼干 Description 给定一个长度为\(n\)的序列,序列每个元素的取值为\([1,x]\),现在给定\(q\)个区间,求在所有取值方案中,区间最小值的最大值的期望是多少? ...

  10. PKUWC/SC 做题笔记

    去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\ ...

随机推荐

  1. mybatis中xml的sql之test中文报错

    在mybatis中sql,test中文报错( java.lang.NumberFormatException 这句话明确告诉了我们是数字格式异常).需加.tostring(). <if test ...

  2. python之xlsx合并单元格

    需求背景: 工作中将数据保存xlsx文件之后,里面每一列中有很多重复的看着很不美观,需要将每一列中的相同值合并起来,是表格看起来美观简洁 处理前 处理后 直接上代码(内涵注释讲解) "&qu ...

  3. python爬取网易云音乐评论及相关信息

    python爬取网易云音乐评论及相关信息 urllib requests 正则表达式 爬取网易云音乐评论及相关信息 urllib了解 参考链接: https://www.liaoxuefeng.com ...

  4. 什么是NineData?突然就火了

    NineData 是集成了 SQL 开发.数据复制.数据备份.数据对比多个模块的云服务,支持混合云(自建库+云数据库的业务架构)和多云(多个不同云厂商数据库组成的业务架构)架构下的企业数据管理,大幅降 ...

  5. Vue快速上门(1)-基础知识图文版

    VUE家族系列: Vue快速上门(1)-基础知识 Vue快速上门(2)-模板语法 Vue快速上门(3)-组件与复用 01.基本概念 1.1.先了解下MVVM VUE是基于MVVM思想实现的,那什么是M ...

  6. VMware虚拟机开机黑屏解决方法

    挂起时可以看到显示,但是开机就黑屏 解决方法: 命令提示符,鼠标右键点击"命令提示符",弹出菜单之后选择"以管理员身份运行" 在命令提示符窗口中输入" ...

  7. Python面试常见算法题集锦(递归部分)

    0x1 前言 开始学习python基础的时候,有以下几种算法是面试中常见的,也是前期学习python的时候可以连带学习了解的,不卡门槛哟 0x2 实现算法的方式很多种,而算法的实现也是分程序语言的,此 ...

  8. JavaScript:操作符:比较运算符及其隐式转换数据类型

    不等关系 即大于>:大于等于>=:小于<:小于等于<= 当比较的两个变量,有非数字时,会隐式转换为数字再比较,转换情况同算术运算符: 当两个变量均为字符串时,不会进行转换,而是 ...

  9. 数据库连接池的一些基本理解,c3p0和druid

    数据库连接池 1,概念: 其实就是一个容器(集合),存放数据库连接的容器. 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来采访数据时,从容器中获取连接对象,用户访问完后,会将连接对象 ...

  10. 克拉玛依初赛-wp

    MISC 签到 16进制转字符串 base64 再来一次base64 flag 论禅论道 7z解压得到jar 使用decom打开 解密 得到flag WEB pingme 抓包,修改POST提交的参数 ...