数位 DP
引入
一般数位 DP 的题目是这样的:
有一个返回值为 bool 类型的函数
。这个函数一般是跟 的数位有关的。 给定
,求 中有多少 的 为真。
。
典型的例子是 windy 数:
求
中有多少个数,满足其不含前导零且相邻两个数字之差至少为 。
前置
我们回顾一下如何比较两个数
下面定义
和 : , 。所以 。- 这告诉我们位数多的数大。
, : , 。所以 。- 这告诉我们最高位大的数大。
和 : ,不能判断。 , 。所以 。- 这告诉我们在最高位相同的情况下,次高位大的数大。
, : ,不能判断。 ,不能判断。 , 。所以 。- 这告诉我们在最高位、次高位相同的情况下,第三高的位大的数大。
- 依次类推。
所以呢?这告诉我们这样一个事情:
- 对于数
,如果一个数 的最前面几位与 相同,接下来的一位比 小,那么剩下的位不管是 都能保证 。
例如,在
; ; ; ; ; ;
这个东西是很显然的,但很关键。
分析
回到题目。我们利用前缀和的思想,转化成求
那么问题就来到了
接下来,我们令
上面提到,如果
- 若
, ; ;- 若
, 。
那么这启发我们可以枚举使得
接下来要做的事情需要根据题目分析。以 windy 数为例。
首先枚举
如果满足,那么问题就变成了:
有多少个
位数,其最高位为 ,并且满足相邻两个数字之差至少为 。其中 和 是给定的。
这个可以直接预处理 DP。设
边界
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!