数位dp
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
谈数位DP
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a、b < 2*10^9注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字,数组会开不起,该怎么办呢?要用到数位dp. 数位dp一般应用于:求出在给定区间[A,B]内,符合条件P(i)的数i的个数.条件P(i)一般与数的大小无关,而与 数的组成 有关.这样,我...原创 2019-03-17 22:54:38 · 182 阅读 · 0 评论 -
LightOJ 1205 Palindromic Numbers
传送门题意: 求给定区间内回文数字的数量思路: 很明显求区间内满足某种条件的数字个数, 就用数位dp, 然后想好状态, 我这是三维dp[st][cur][state] 表示起始位是st, 当前位是cur, 是否构成回文数字(state1是,. 0否)然后就是内部循环怎么写了, 总体思路就是前一半的位置上的数字任意填, 然后到可以填后一半时,不仅要填,还要对称的填,然后依次记忆化搜索即可l...原创 2019-03-18 17:21:37 · 175 阅读 · 0 评论 -
HDU 2089 数位dp解法
传送门(数位dp入门题)题意: 就是求给定区间内数字中不含4和连号62思路: 很入门的数位dp, dp[len][state] 表示当前第len 位,并且前一位是否是6, 然后记忆化搜索即可, 因为每到一个位置的数字, 都有两种状态, 需要分开考虑.ll dp[30][2], shu[30];ll dfs(int st, int state, int limit) { if (s...原创 2019-03-18 17:34:59 · 267 阅读 · 0 评论 -
小米OJ编程比赛 2月常规赛 Carryon 数数字
传送门题意: 给定l, r通过以下步骤求答案1: 需要将 l 到 r 之间的数全部转化成 16 进制,然后连起来2: 将连起来的数又转化成 10 进制3: 将最终结果对 15 取模数据范围:1 <= L <= R <= 1e12思路: 首先推导, 假设区间[L, R] 转化为16进制后连起来为 xyz. 那么答案是多少了.ans = (x * 16 ^ 2 + y ...原创 2019-03-18 19:30:32 · 363 阅读 · 0 评论 -
leetcode 1015 Numbers With Repeated Digits
传送门题意: 给定一个N,求1 - N中,输出至少有一位数字是重复的数字的个数.思路: 很明显, 这道题要用数位dp, 考虑两点, 一是前导零的影响, 二是记录的应该是每一位的次数, 而不能是简单的标记和清空标记, 比如101 和 110. 所以状态想好为dp[i][j][k] 表示起始位i, 当前位j, 是否已经有重复位数k(0 or 1) , 然后做记忆化搜索就行, 没啥坑点.AC Co...原创 2019-03-18 20:40:13 · 605 阅读 · 0 评论