这玩意儿还要学自己推不出来的 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;
}

最新文章

  1. Linux下的压缩和解压缩命令——bzip2/bunzip2
  2. shell 问题解决
  3. 正确的前端传后台json方式
  4. Jetty 发布web服务
  5. List.Sort用法
  6. [转]快速构建App界面的框架(●&#39;◡&#39;●) -----SalutJs
  7. 总结 output 用法
  8. java.util.concurrent并发包诸类概览
  9. VS2015预览版中的C#6.0 新功能(三)
  10. setinterval
  11. Apache与Nginx优缺点比较
  12. 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
  13. .Net Core 之 MSBuild 介绍
  14. 如何解决chrome 等浏览器不支持本地ajax请求的问题
  15. Dom的增删查改以及常用事件
  16. 从parcel.js打包出错,到拥抱nvm
  17. 什么是MVC ?
  18. c# linq 汇总
  19. VUE2.0 饿了吗视频学习笔记(三):VUE2.0取消了v-link
  20. python3之深浅拷贝

热门文章

  1. USB限流,短路保护芯片IC
  2. 使用pycharm or vscode来编写python代码?
  3. ES6——模块化
  4. 解读JVM级别本地缓存Caffeine青出于蓝的要诀3 —— 讲透Caffeine的数据驱逐淘汰机制与用法
  5. 开源库libcli的安装与使用
  6. 利用Git同步思源笔记
  7. [深度学习] ncnn编译使用
  8. python实现单向循环链表与双向链表
  9. 图解 Andrew 算法求凸包
  10. 企业应用架构研究系列十三:整合EFCore&amp;Dapper 通用ORM框架EFDapper