一、题目
二、思路
1、这是很明显的数位DP;
2、和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作。但是,不管多少进制,原理都是一样的;
3、这里有个小坑,题目中说大于10的数用A、B、C、……、Z表示,那都是骗人的。使用数位DP分解给定上界的每一位数后,得到没一位的就是在给定进制下的该位的权值,压根不需要在数字、字母之间转来转去,纯数字娱乐;
4、比较直观的想法是:
(1)枚举给定范围内的每一个进制;
(2)计算在b进制下的回文数个数,然后即可得出在b进制下的和;
(3)累加上面的所有和,得出最终答案。
5、在4(2)中,利用数位DP计算在b进制下的回文数个数,需要记忆化。如何记忆化,怎么表示状态,这个是本题的关键所在。首先,当前搜索状态在数位中的位置pos,进制b,这个是确定状态的两个依据,不难想到。接下来,先把dp数组的设计放下来,看看dfs函数。既然与回文数有关,那自然,回文数的起始位置应该知道,因为前导0是不参与回文计算的。还有一点非常关键:因为要判断一个数是否回文,就必须从端点到中间扫描整个数字序列,而如果要这么做,那我们的记忆化就玩完了,每个数都判断一下,就变成暴力枚举了。所以,要让判断在搜索过程中完成。