码迷,mamicode.com
首页 > 其他好文 > 详细

HDU-6156题解(数位DP)

时间:2018-01-16 17:56:50      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:娱乐   如何   数组   题解   一个   端点   分享   设计   src   

一、题目

  技术分享图片

二、思路

  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是不参与回文计算的。还有一点非常关键:因为要判断一个数是否回文,就必须从端点到中间扫描整个数字序列,而如果要这么做,那我们的记忆化就玩完了,每个数都判断一下,就变成暴力枚举了。所以,要让判断在搜索过程中完成。

 

HDU-6156题解(数位DP)

标签:娱乐   如何   数组   题解   一个   端点   分享   设计   src   

原文地址:https://www.cnblogs.com/565261641-fzh/p/8296445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!