数位DP
文章平均质量分 89
九野的博客
这个作者很懒,什么都没留下…
展开
-
Codeforces 55D Beautiful numbers 数位dp(入门
题目链接:点击打开链接 题意: 我们认为一个数 num 能被每一位上的数字整除(expect 0) 那么这个数num就是合法的。 给出区间[l,r] ,问这个区间内有多少个合法的数。 首先solve(long x) 返回 [0, x] 内的合法个数,答案就是 solve(r) - solve(l-1); 以1234567为例 flag表示当前这位是能任意填,还是只能填 若当前搜索的是原创 2015-03-29 22:57:54 · 1415 阅读 · 0 评论 -
HDU 4352 XHXJ's LIS 数位dp
题目链接:点击打开链接 题意: 一个数自身的最长子序列=每一位都是一个数字然后求的LIS 问区间内有多少个数 自身的最长子序列==k 思路: 因为自身的最长子序列至多=10,且由0~9组成,所以状压10个二进制表示0~9中哪些数字已经用过 dp[i][j] 表示长度为i的数字,最长子序列中出现的数字状态j的方法数。由于询问数=K,也存下来避免重复计算。 #includ原创 2015-04-01 21:05:20 · 1212 阅读 · 0 评论 -
Codeforces 54C First Digit Law 数位dp+概率dp
题目链接:点击打开链接 题意: 给定n个区间 下面n个区间 从每个区间中任选一个数。则一共选出了n个数 给出K( 问选出的n个数中 最高位是1的个数 占n个数的百分之K以上的概率是多少。 先求出对于第i个区间 ,选出的数最高位是1的概率P[i] dp[i][j] 表示前i个数选了j个最高位是1的概率. ///////////////////////////////////原创 2015-03-31 14:13:05 · 1168 阅读 · 0 评论 -
POJ 3252 Round Numbers 数位dp(入门
题目链接:点击打开链接 题意: 给定一个区间,求区间内有多少个合法数(当这个数的二进制中0的个数>=1的个数称为合法数 二进制无前导0) 思路: cnt[i]表示二进制长度为i位(即最高位为1,其他位任意)时的合法数个数。 sum[i] 就是二进制长度 然后从最高位枚举到低位即可。维护当前0的个数。 #include #include #include原创 2015-04-02 21:56:16 · 1291 阅读 · 0 评论 -
SPOJ MYQ10 Mirror Number 数位dp
题目链接:点击打开链接 MYQ10 - Mirror Number A number is called a Mirror number if on lateral inversion, it gives the same number i.e it looks the same in a mirror. For example 101 is a mirror number whi原创 2015-03-31 22:44:29 · 1000 阅读 · 0 评论 -
HDU 2089 不要62 数位dp(入门
题目链接:点击打开链接 中文题。 问区间内有多少个合法数字(一个数是合法数字须满足1、不含4 ,2、每个6后面都不是2 dp[i][0]表示长度为i的数字中,最高位不为6时的合法个数, dp[i][1]表示长度为i的数字中最高位是6的合法个数。 #include #include #include #include using namespace std; typedef原创 2015-04-01 15:44:32 · 1200 阅读 · 0 评论