鞠古香 发表于 2025-7-15 19:36:52

关于数位dp

本来是8个月前答应写的,咕咕了240天,汗
数位dp

定义:from-OI Wiki


说点人话:

当一道关于特定数字计数的问题出现,值域范围到达\(10^{18}\),可以通过枚举每个数位上的数, 递推/搜索 出答案
小思想:关于统计区间\(\)之间数的数量

前缀和:\(sum=sum-sum\)
具体例题

1. P2602 数字计数

可以发现,如果直接枚举数字,会炸掉,联想一下会枚举的数字

[*]11111111
[*]......
[*]21111111
[*]''''''
[*]31111111
[*]......
发现重合部分好多,可不可以避免重合呢?
直接告诉你 : 爆搜+剪枝
(比如)搜到亿位时,发现后面的数字出现次数相当,直接返回搜过的值
给出基本代码并讲解

int dfs(int pos,bool limit,int sum,bool lead0,int d){        int res=0;        if(!pos) return sum;        if(!limit&&dp!=-1) return dp;        int up=limit?a:9;        for(int i=0;i
页: [1]
查看完整版本: 关于数位dp