【总结】数位dp
个人认为是比较简单的 d p dp dp。
首先,状态不难想,可求状态有这些:位数,前导零,limit标记,余数,满足条件的数的和,满足条件的数的平方和等。
其次,注意编程的细节。然后这道题就搞定了。
数位 d p dp dp的时间复杂度很好分析,就是所有可能的状态数。一般状态数 s s s<=1e5时不容易超时,如果状态数小,不考虑常数的话,可以将 i n t int int宏定义成 l o n g l o n g long long longlong。
若数值大于
l
o
n
g
l
o
n
g
longlong
longlong,则用字符串输入,其他操作与正常的数相同
结果一般要取模(因为数太多)
以 CQOI2016手机号码 为例:
这里用了一个小技巧。实际上前导零在判断数是否合法时会产生错误答案,但是由于
[
l
,
r
]
[l,r]
[l,r]不含前导零,而
[
1
,
l
−
1
]
[1,l-1]
[1,l−1]又都被以同种规则算了一次,所以会抵消。
但是当 l = 1 0 10 l=10^{10} l=1010时, l − 1 l-1 l−1是10位数,而 r r r是 11 11 11位数,所以判断条件其实是不等价的。我们只需在第 11 11 11位补一个 0 0 0即可,这样和 r r r算出来的重叠部分就可以抵消了。
以 HDU4507恨 7 不成妻 为例:
这道题很新颖的地方就在于没有单纯求个数,而是求满足条件的数的平方和。
其实本质是一样的。我们仍然沿用dfs计数的思想,不过记录三个值:满足条件的数的个数,满足条件的数的和,满足条件的数的平方和。
我们可以用 f x , s 1 , s 2 f_{x,s1,s2} fx,s1,s2来表示还剩 x x x位,这个数除末 x x x位以外模 7 7 7余 s 1 s1 s1,这个数每一位之和除末 x x x位以外模 7 7 7余 s 2 s2 s2时所有与 7 7 7无关的数的末 x x x位的平方和
数学转化
让我们来研究一下
(
x
1
+
t
∗
1
0
y
)
2
+
(
x
2
+
t
∗
1
0
y
)
2
+
.
.
.
+
(
x
n
+
t
∗
1
0
y
)
2
(x_1+t∗10^y)^2+(x_2+t∗10^y)^2+...+(x_n+t∗10^y)^2
(x1+t∗10y)2+(x2+t∗10y)2+...+(xn+t∗10y)2这个式子。
用完全平方公式展开即可。
以SAC#1 - 萌数为例:
n<=1000,但仍然可以用数位dp的框架来做。只不过搜索层数和状态数增加了而已。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530371.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」