B3883 [信息与未来 2015] 求回文数 数位dp题解

B3883 [信息与未来 2015] 求回文数 数位dp题解

1前言

作者认为本题是新手联系数位dp的好题
建议先阅读作者主页前一篇关于数位dp的题解

2问题

具体如下图
在这里插入图片描述
数据范围这么大!
甚至需要高精度来存储
这个数据范围就是一眼数位dp了,别的算法必定超时

3数位dp-part1-预处理

很容易发现,对于所有 k k k位数,回文数的数量是固定的
易得一位数和两位数的回文数的数量都是 9 9 9(不含0)
考虑 k k k位回文数,其实是 ( k + 1 ) / 2 (k +1)/ 2 (k+1)/2位的数进行对称操作
( k k k为奇数时对称轴为 ( k + 1 ) / 2 (k+1)/2 (k+1)/2位的数,否则为 k / 2 k/2 k/2 k / 2 + 1 k/2+1 k/2+1位字符的中间)
最外面不能是 0 0 0,那么方案数显然为 9 × 1 0 ( k − 1 ) / 2 9 \times 10^{(k-1)/2} 9×10(k1)/2
那么设 k k k位数的回文数数量为 f k f_{k} fk
设所有不大于 k k k位,即 1 − − 1 0 k − 1 1--10^{k}-1 110k1区间内的回文数总数为 s u m k sum_{k} sumk
e k = 1 0 k e_{k} = 10^k ek=10k,这个数位dp几乎都要用,不要忘了
即得状态转移方程
f i = 9 × e ( k − 1 ) / 2 f_{i} = 9 \times e_{(k-1)/2} fi=9×e(k1)/2
s u m i = s u m i − 1 + f i sum_{i} = sum_{i-1}+f_{i} sum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值