数位dp
文章平均质量分 83
MartaYang
这个作者很懒,什么都没留下…
展开
-
HDU 2089 不要62【数位dp】
题意:要求一段区间[n,m]上的所有的数中满足以下条件的数的个数:数的各位中不能出现4,且不能出现连续的62。 思路:数位dp 关于数位dp: 这类题一般是关于求解一段区间中满足一些数位条件的数的个数,这些条件往往是与数位、进制有关的,比如要求数的k进制表示下有n个1,数的k进制下各位加权和不大于n等等。其处理方法是:求满足条件数的个数时要用dfs一位一位地确定,并且关键是要使用dp数组记忆已算出的结果,再枚举到相同情况时直接返回dp数组中的计数即可,外加一些优化,比如memset外提等。 dp数原创 2017-08-22 21:57:20 · 319 阅读 · 0 评论 -
HDU 4734 F(x)【数位dp+memset优化】
题意:求[0...b]中10进制下各位数之和小于f(a)的个数,F(a) = A n * 2n-1 + A n-1 * 2 n-2 + ... + A 2 * 2 + A1 * 1 思路:数位dp,关于思想不必多提,见HDU 2089 不要62【数位dp】 ,主要注意memset优化:通过优化算法,可以使得对dp数组的初始化不必对每个不同的F(a)都重新算一遍,这样就可以避免出现TLE的错误,比如此题,如果dp数组记录的是dp[pos][sum],sum是目前为止的和,那么该值是与输入F(a)有关的,故每原创 2017-08-22 22:51:44 · 314 阅读 · 0 评论 -
POJ 3252 Round Numbers【数位dp+lead使用】
题意:统计一段区间的数中二进制表示下0的个数≥1的个数的数有多少个。 思路:数位dp,只是之前的dfs中只需考虑状态和limit边界,而此问题中需要引入前导0的考虑(前导0当然不计入0的个数中),用变量lead表示是否前一位是前导0,用法跟limit一样一样的。原创 2017-08-28 10:22:47 · 280 阅读 · 0 评论 -
HDU 6156 Palindrome Function【数位dp】
题意:这是2017中国大学生程序设计竞赛网络选拔赛的题7。题意解释过来相当于要求给定进制下一段区间中有多少个回文数。 思路:这种涉及到区间统计满足要求的数个数,并且要求是关于进制,数的各位的题目,考虑用数位dp。 关于dp数组的维度,一个是进制,一个维度是枚举到的数位pos,一个是状态,故至少三维数组。 关于dp的状态,考虑用当前枚举的这个数的开始位的位置编号,并且用临时数组记录从开始位到当前枚举的数位pos之间已经生成的各位,这样一来: 1、dfs时方便状态转移,当pos还没枚举到一般数位时继续枚原创 2017-08-28 10:41:03 · 316 阅读 · 0 评论 -
CodeForces 401D Roman and Numbers【数位dp+状态压缩】
题意:给你数n和m,求n的各位重排后有多少个满足膜m==0? 思路:由于n的范围最大可以到18位,故不能暴力枚举(会超时),那么思路就放在了带记忆化的枚举上,数位dp。重点在于如何记忆化,比如现在枚举到了第pos位,然后还需要剩下待定的各位和膜m为mmod,在什么情况下就能直接返回已知结果?当然是当待定的各位还有哪些选择和mmod都确定时结果便确定了: 这便是dp数组:dp[状态(还有那些数待安排)][mmod] 注:此处dp数组并没有pos这一维度,原因在于状态中就已经包含pos此维度了。 而下一原创 2017-08-29 13:03:33 · 391 阅读 · 0 评论