
数位dp
xyc1719
努力会说谎,但努力不会是白费
展开
-
poj3208 启示录 数位dp
【一句话题意】定义十进制下有3个连续的6的数为魔鬼数。有T个询问,求第k小的魔鬼数。 T<=1000,k<=5e7 【分析】由于K有5e7那么大,哪怕线性dp,常数稍大就会有TLE的风险。如果内存小于128MB又会有MLE的问题显然,预处理出第k大的魔鬼数是不可靠的。 由于T较小,我们转而考虑能否像计数dp一样将先大致预处理出辅助数组,再进行“拼凑”。回答是可行的。但dp数组的定义是与...原创 2018-10-28 20:17:08 · 819 阅读 · 0 评论 -
windy数 数位DP
【一句话题意】定义相邻两个数位之差都大于2的数为windy,问[a,b]中windy数有多少。 a,b&lt;=2e9 【分析】鉴于a,b的值并不是太大(int都存的下),所以就产生了玄学打表的方法,按每1e6个数打一次表记录到x为止有一个windy数。边界部分就直接暴力枚举2e6个数。不服不行啊 当然数位dp可以比它复杂度上更优,也跟更能处理复杂的情况。定义f[i,j]表示i位数,最高位为j的方...原创 2018-11-01 21:11:46 · 311 阅读 · 0 评论 -
密码 passwd.cpp
【一句话题意】给你一个长度不超过17 的由0…9 组成的无前导0 的字符串S,求S 中的数字排列组成的无前导零的能被17 整除的整数中字典序第K 小的那个数。 k<=17! 【分析】 s有17位显然是数位dp,求排列第k大显然是计数dp。状态定义由于是求排列,所以不能像普通数位dp一样,定义为f[state][k]表示选择数之后状态为state对17取模为k时的方案总数。f[0,0]=1。 ...原创 2018-11-02 15:42:47 · 260 阅读 · 0 评论