数位dp,今天学长讲的稍玄学,课下花了一会时间仔细看了一下,发现板子是挺好理解的,就在这里写一些:

数位dp主要就是搞一些在区间中,区间内的数满足题目中的条件的数的个数的一类题,题目一般都好理解,这时候就要使用今天介绍的数位dp;

比如这道例题:

给定两个正整数a和b,求在[a,b]中的所有整数中,每个数字各出现了多少次。

求出在给定区间 [A,B] 内,符合条件 f(i) 的数 i 的个数。条件 f(i) 一般与数的大小无关,而与数的组成有关

由于数是按位dp,数的大小对复杂度的影响很小,这就是数位dp干的活!

题目看起来很简单,然后让我们做,我们会怎么做呢?反正我在没有学数位dp的时候当然是暴力枚举了,不用看1e12的数据范围一定会T到飞起,那我们怎么办呢?那就先让我来介绍一下数位dp吧!

数位dp的本质其实就是记忆化搜索,所以我们只要按照搜索的思路来做就好了!

我们来想一想如何设计这个搜索

这个搜索,其实我感觉就像我们在考场上打的dfs暴力,记忆化搜索的过程就是

从起点向下搜索,到最底层得到方案数,一层一层向上返回答案并累加,最后从搜索起点得到最终答案。

对于 [l,r] 区间问题,我们一般把他转化为两次数位dp,即找 [0,r] 和 [0,l-1] 两段,再将结果相减就得到了我们需要的 [l,r];

所以这里的第一个套路就是遇见区间就要想前缀和!

如果理解了上述过程,我们需要考虑的就是怎样判断现在在哪一层,怎样判断当前的状态——这就需要我们传进一些参量。

我们一般设的dp状态就是f[i][.....]表示第i位......然后后面的就是题目要求的,所以就像理科生答文科题一样(虽然这个比喻并不恰当)我们就可以愉快的套板子了!

记忆化搜索的传参,我们一般传这几个:

1.搜到的位数pos,就是现在搜到了第几位;

2.lead值表示前面是不是全是前导0;1表示是,0表示不是!

3.最高位限制limit,同样0/1,表示是不是是这一位的最大的数!

4.根据题目中要求传的參!(这才是数位dp考察的!)

然后我们就来具体解释一下穿的參的一些细节!

关于limit

如果当前位的limit==1并且去到了这一位的最大值,那么下一位limit=1;

如果当前位的limit==1但是没有取到最高值,那么下一位limit就等于0;

如果当前位的limit==0则下一位的limit==0

综上所述:这一位的数取i时,且这一位最高可以达到的值是res 则下一位的lmimit=(res==1&&limit)

关于lead标记

如果前导0lead的值为1并且当前位的值是0,则pos+1继续搜索;

如果lead==1&&当前位不是0,那么本位可以做当前数的最高位pos+1接着搜索!

大概的dfs结构

1.如果搜完了,就return 1;

2.如果没有最高位的限制并且已经搜过了 return value

3.获取当前位的最大数字,循环0到最大数字,循环内部根据题目的意思来判断;

  如果前一位有前导0,下一位就随意,否则就按部就班的搜索就行了!

4.记得把这一位的dp值赋上!然后return!

A. Windy 数

题目描述

原题来自:SCOI 2009

Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为

的正整数被称为 Windy 数。Windy 想知道,在和之间,包括 和 ,总共有多少个 Windy 数?

还记得引入的那道题吗?

「ZJOI2010」数字计数

题目描述

给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。

输入格式

输入文件中仅包含一行两个整数a、b,含义如上所述。

输出格式

输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。

这道题就是上面的典型题目!传得参数也挺少的,就是只要方法是对的,无论什么样的复杂度都可以AC,这里在最后就介绍一个乱搞方法!

乱搞也是要技术的!

我们发现这道题的题目要求中并没有多少坑点,那么我们可以通过打表发现没增长一个数,每一位出现的次数都会增长相同的量,所以我们大胆的进行乱搞,由于这道题只要大点模一下大数,小点就直接暴力统计就完了!

乱搞代码!

////////////未完待更!!!/////////////////////

「动态规划」-数位dp专题的更多相关文章

  1. 「笔记」数位DP

    目录 写在前面 引入 求解 特判优化 代码 例题 「ZJOI2010」数字计数 「AHOI2009」同类分布 套路题们 「SDOI2014」数数 写在最后 写在前面 19 年前听 zlq 讲课的时候学 ...

  2. 「算法笔记」数位 DP

    一.关于数位 dp 有时候我们会遇到某类问题,它所统计的对象具有某些性质,答案在限制/贡献上与统计对象的数位之间有着密切的关系,有可能是数位之间联系的形式,也有可能是数位之间相互独立的形式.(如求满足 ...

  3. 数位DP专题

    这周开始刷数位DP,在网上找到一份神级数位DP模板,做起题目来爽歪歪. http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html in ...

  4. 动态规划:数位DP

    数位dp一般应用于: 求出在给定区间[A,B]内,符合条件P(i)的数i的个数 条件P(i)一般与数的大小无关,而与 数的组成 有关 例题是一道BZOJ1833,让求出区间所有整数每个数字出现的次数 ...

  5. 蒟蒻的数位DP专题总结

    BZOJ  1026: [SCOI2009]windy数: 题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1026           d ...

  6. P4317 花神的数论题 动态规划?数位DP

    思路:数位$DP$ 提交:5次(其实之前A过,但是调了调当初的程序.本次是2次AC的) 题解: 我们分别求出$sum(x)=i$,对于一个$i$,有几个$x$,然后我们就可以快速幂解决. 至于求个数用 ...

  7. 「总结」插头$dp$

    集中做完了插头$dp$ 写一下题解. 一开始学的时候还是挺蒙的. 不过后来站在轮廓线$dp$的角度上来看就简单多了. 其实就是一种联通性$dp$,只不过情况比较多而已了. 本来转移方式有两种.逐行和逐 ...

  8. LOJ3102. 「JSOI2019」神经网络 [DP,容斥,生成函数]

    传送门 思路 大部分是感性理解,不保证完全正确. 不能算是神仙题,但我还是不会qwq 这题显然就是求:把每一棵树分成若干条链,然后把链拼成一个环,使得相邻的链不来自同一棵树,的方案数.(我才不告诉你们 ...

  9. LOJ2537. 「PKUWC2018」Minimax [DP,线段树合并]

    传送门 思路 首先有一个\(O(n^2)\)的简单DP:设\(dp_{x,w}\)为\(x\)的权值为\(w\)的概率. 假设\(w\)来自\(v1\)的子树,那么有 \[ dp_{x,w}=dp_{ ...

随机推荐

  1. Python3程序设计指南:01 过程型程序设计快速入门

    大家好,从本文开始将逐渐更新Python教程指南系列,为什么叫指南呢?因为本系列是参考<Python3程序设计指南>,也是作者的学习笔记,希望与读者共同学习. .py文件中的每个估计都是顺 ...

  2. Python3实战spark大数据分析及调度 ☝☝☝

    Python3实战spark大数据分析及调度  ☝☝☝ 一.实例分析 1.1 数据 student.txt 1.2 代码 二.代码解析 2.1函数解析 2.1.1 collect() RDD的特性 在 ...

  3. Bran的内核开发教程(bkerndev)-02 准备工作

    准备工作   内核开发是编写代码以及调试各种系统组件的漫长过程.一开始这似乎是一个让人畏惧的任务,但是并不需要大量的工具集来编写自己的内核.这个内核开发教程主要涉及使用GRUB将内核加载到内存中.GR ...

  4. PowerShell攻击:nishang

    nishanhg 下载地址:https://github.com/samratashok/nishing   1.简介 nishang的使用是要在PowerShell 3.0以上的环境中才可以正常使用 ...

  5. C++bosst遍历文件目录,根据文件名返回文件路径。

    VS2071安装Boost库 安装boost库 接着安装boost_system-vc140(可根据开发需求,更改版本) 废话不多说,上代码 // 测试程序.cpp : 此文件包含 "mai ...

  6. Arduino学习笔记③ 经典LED

    1.前言     今天我们开始同时讲解理论以及实践.对于绝大部分有过单片机编程经历的人来说,第一个接触的大多数就是LED灯(忽然想起博主大一那个懵懂的时代,当时大三的师兄给我们展现了一把流水灯功力,当 ...

  7. python的递归函数怎么用

    在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数 理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰 使用递归函数需要注意防止栈溢出.由于栈的大小不 ...

  8. SpringBoot SpringCloud版本对应

  9. (day30)GIL + 线程相关知识点

    目录 昨日内容 进程互斥锁 队列 进程间通信 生产者与消费者模型 线程 什么是线程 为什么使用线程 创建线程的两种方式 线程对象的属性 线程互斥锁 今日内容 GIL全局解释器锁 多线程的作用 计算密集 ...

  10. Redis(五)持久化

    一.RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发. 1.触发机制 (1)手动触发:save命令和bgsave命令 save命令:阻塞当前Re ...