![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数位dp
文章平均质量分 65
Frozen_Guardian
已退役菜鸡Acmer
展开
-
CodeForces - 468C Hack it!(构造+数位dp)
题目链接:点击查看题目大意:求出一段区间 [l,r][l,r][l,r] 的数位和对 aaa 取模后为 000。更具体的,设 f(x)f(x)f(x) 为 xxx 的数位和,本题需要求出一对 [l,r][l,r][l,r] ,满足 ∑i=lrf(i)≡0(moda)\sum\limits_{i=l}^{r}f(i)\equiv0\pmod ai=l∑rf(i)≡0(moda)题目分析:假设一个上界为 inf=10kinf=10^{k}inf=10k,则一个数为 xxx 且 x<infx<i原创 2021-08-26 21:25:40 · 248 阅读 · 0 评论 -
CodeForces - 1560F2 Nearest Beautiful Number (hard version)(二分+数位dp)
题目链接:点击查看题目大意:给出一个十进制数字 nnn 和一个约束 kkk,问大于等于 nnn 且满足不同的数位个数小于等于 kkk 的最小的数字是多少题目分析:自己写的贪心太丑了,就不放上来丢人了偷的杨大佬的trick,对于某个数字 xxx,如果可以快速求出区间 [1,x][1,x][1,x] 中有多少个数字满足不同的数位个数小于等于 kkk 的话,显然这个答案是具有单调性的考虑二分答案,然后用数位dp快速求解这个过程,dp[pos][state][k]dp[pos][state][k]dp[po原创 2021-08-19 22:59:19 · 237 阅读 · 4 评论 -
2021牛客多校1 - Find 3-friendly Integers(数位dp)
题目链接:点击查看题目大意:定义 3−friendly3-friendly3−friendly 数字为,将十进制的数字 xxx 转换为字符串后,存在一个子串所代表的数字,可以被 333 所整除,求区间 [L,R][L,R][L,R] 内的 3−friendly3-friendly3−friendly 数字的个数题目分析:当思维题来做的话,就是大于 100100100 的数字一定是 3−friendly3-friendly3−friendly 数字,证明的话也很简单,因为十进制下长度大于等于 333 的数原创 2021-07-21 16:25:50 · 182 阅读 · 3 评论 -
FZU - 2042 The Mad Mathematician(数位dp)
题目链接:点击查看题目大意:给出 A,B,C,D,EA,B,C,D,EA,B,C,D,E,求 sumsumsum题目分析:数位dp,开五维维护一下状态即可,简单说一下 dpdpdp 的状态:dp[pos][x>=A][x<=B][y>=C][y<=D][xor>E]dp[pos][x>=A][x<=B][y>=C][y<=D][xor>E]dp[pos][x>=A][x<=B][y>=C][y<=D][xor>原创 2021-05-05 15:55:55 · 183 阅读 · 3 评论 -
CodeForces - 628D Magic Numbers(数位dp)
题目链接:点击查看题目大意:首先规定一个不含前导零的数字如果满足:从最高位开始,偶数位置全为 ddd从最高位开始,奇数位置不能出现 ddd则称该数字为 d−magicd-magicd−magic 数字。现在给出一个区间 [l,r][ l , r ][l,r] ,问区间内有多少个可以整除 mmm 的 d−magicd-magicd−magic 数字,lll 和 rrr 同阶且 l,r∈[1,102000]l,r \in [ 1 , 10^{2000} ]l,r∈[1,102000]题目分析:数位原创 2020-12-19 17:06:46 · 370 阅读 · 1 评论 -
2020ICPC(上海) - Sum of Log(数位dp)
题目链接:点击查看题目大意:给出X 和 Y,求题目分析:因为涉及到了位运算且看似可以递推,所以考虑数位dp,因为统计答案时的 i 和 j 的与为 0,所以 i + j = i & j,那么取 log 其实就是最高位,也就是 max( highbit_i , highbit_j )最简单的状态就是:dp[ pos ][ highbit_x ][ highbit_y ][ x <= X ][ y <= Y ],不过很可惜会 TLE因为我们到达终点后,我们只关心 max( ..原创 2020-12-14 15:37:45 · 2042 阅读 · 6 评论 -
HDU - 6899 Xor(数位dp)
题目链接:点击查看题目大意:给出四个整数 A , B , K , W ,问满足下列条件的二元对的个数:x , y 是整数 x <= A , y <= B abs( x - y ) <= K x xor y <= W题目分析:数位dp,如果按照二进制进行数位的话,除了第三个条件都比较容易实现,所以对第三个条件进行以下转换,abs( x - y ) <= K ,去掉绝对值的话就能转换为 x - y <= K && y - x <= K,.原创 2020-09-22 16:26:15 · 620 阅读 · 2 评论 -
HDU - 6156 Palindrome Function(数位dp)
题目链接:点击查看题目大意:给出一段区间 [ l , r ] ,问十进制下的 [ l , r ] 内在 k 进制下有多少个回文串题目分析:对于每个进制下求数位 dp 即可,dp[ pos ][ len ][ k ] 记录的是在第 pos 位上,回文串的长度为 len ,在 k 进制下有多少个回文串,根据数位dp空间复杂度来计算时间复杂度,大概就是 40^3 * 36 ,1e6左右的级别,通过该题目还是绰绰有余的代码://#pragma GCC optimize(2)//#pragma.原创 2020-09-16 23:27:12 · 173 阅读 · 0 评论 -
SDUT - 2609 A-Number and B-Number(二分+数位dp)
题目链接:点击查看题目大意:规定 A 数组为所有十进制下含有 7 或者可以被 7 整除的数字,例如 A 数组中的前 10 个数为:{a[1]=7,a[2]=14,a[3]=17,a[4]=21,a[5]=27,a[6]=28,a[7]=35,a[8]=37,a[9]=42,a[10]=47},同时规定 B 数组为 A 数组的一个子集,其中不含有以 A 中元素作为下标的 A 数组,例如 B 数组中的前 10 个数为:{b[1]=7,b[2]=14,b[3]=17,b[4]=21,b[5]=27,b[6..原创 2020-09-08 20:51:22 · 206 阅读 · 0 评论 -
牛客多校6 - Harmony Pairs(数位dp)
题目链接:点击查看题目大意:给出一个数字 n ,规定 S( x ) 为数字 x 的数位和,现在问有多少对 ( A , B ) ,满足 A <= B 且 S( A ) > S( B )题目分析:数位dp,比赛时没有来的及开这个题,或许开了这个题也做不出来。。dp[ pos ][ delt ][ flag1 ][ flag2 ] :pos:第 pos 位 delt:S( A ) 和 S( B ) 的差值 flag1:B <= N? flag2:A <= B?剩下的原创 2020-07-28 00:15:10 · 339 阅读 · 0 评论 -
牛客 - 数位操作2(数位dp)
题目链接:点击查看题目大意:给了你一个极端大的数据集合的信息N, SUM, X 如下 这个数据集合里面的N位, 每一数位求和之后刚好等于SUM (比如四位数 1234 数位求和之后是 10); 它们都有N位, 十进制的(每一位都在0~9), 我们这里降低点难度, 特别容许前导0的存在. 1234, 0123 都是合理的数; 这N位长度的数字字符串, 任意连续的三位数字构成的数据都能被X整除. PS: 有可能 有空数据集为了减低难度你只要求出原来数据集合内有多少数据原创 2020-05-24 17:57:06 · 348 阅读 · 0 评论 -
SPOJ - BALNUM Balanced Numbers(数位dp+进制转换)
题目链接:点击查看题目大意:给出平衡数的定义:每一个偶数出现的次数必须是奇数次,每一个奇数出现的次数必须是偶数次,求给定区间中有多少个平衡数题目分析:数位dp,这个题目就难在怎么确定状态转移,本来我看错题目了,以为只要有奇数个偶数和偶数个奇数就行,但还是想的太简单了,看了网上大佬们的题解才知道,原来我们可以把每一个数字的状态压缩,每一个数字都有三种状态:0表示没出现过,1表示出现了奇数次,...原创 2019-08-17 14:43:00 · 197 阅读 · 0 评论 -
HDU - 4507 吉哥系列故事——恨7不成妻(数位dp)
题目链接:点击查看题目大意:给出闭区间[l,r],求出区间内与7不沾边的数的平方和与7有关的条件:整数中某一位是7; 整数的每一位加起来的和是7的整数倍; 这个整数是7的整数倍;题目分析:抛去平方和,如果改成统计有多少个符合条件的数字,那就是传统的数位dp了,只需维护一个dp[pos][sum1][sum2]即可,pos表示位数,sum1表示第二个条件的余数,sum2表示第三...原创 2019-08-16 10:51:43 · 530 阅读 · 0 评论 -
HDU - 3709 Balanced Number(数位dp)
题目链接:点击查看题目大意:将一串数字视为天平,两端平衡的数字称为平衡数,并求出一段闭区间中平衡数的个数。所谓的平衡条件即为力臂与力相乘后两端的数量和可以抵消,例如数字4139可以视为以3为中轴的天平,天平左边:4*2+3*1=9,天平右边:9*1=9。题目分析:数位dp,输入一个数后对其每一位进行枚举测试,即令该位置当中轴时,统计满足条件的个数,最后再减去(len-1)即可,因为...原创 2019-07-31 20:54:52 · 250 阅读 · 0 评论 -
HDU - 3555 Bomb(数位dp)
题目链接:点击查看题目大意:给定一个整数n,求从1到n的闭区间内含有相邻“49”的数字的个数。题目分析:裸的数位dp,这里说一下两种做法,第一种是正着求,也就是求含有49的数字的个数,第二种是反着求,求不含49的数字的个数,最后再和n做差就好了。正着求:规定dp[pos][pre][state]为第pos位上,前一个数为pre,目前状态为state(所枚举的这个数字是否含有相邻的4...原创 2019-07-31 17:07:35 · 185 阅读 · 0 评论 -
数位dp模板+理解
// pos = 当前处理的位置(一般从高位到低位)// pre = 上一个位的数字(更高的那一位)// state = 要达到的状态,如果为1则可以认为找到了答案,到时候用来返回,// 给计数器+1。// limit = 是否受限,也即当前处理这位能否随便取值。如567,当前处理6这位,// 如...原创 2019-07-31 16:53:12 · 645 阅读 · 0 评论 -
POJ - 3252 Round Numbers(数位dp)
题目链接:点击查看题目大意:规定一个数如果二进制中0的个数大于等于1的个数,则这个数称为“整数”,问闭区间a,b中有多少个整数题目分析:数位dp,dp[pos][c0][c1]代表前pos为中有c0个0和c1个1的整数数量pos:当前位置,c0:0的个数,c1:1的个数,lead:是否有前导零,limit:是否为最高位注意:对前导零的判断上代码:#include<i...原创 2019-07-30 12:03:27 · 223 阅读 · 0 评论 -
HYSBZ - 1026 windy数(数位dp)
题目链接:点击查看题目大意:求a到b闭区间内满足相邻两个数字之差大于等于2的数字个数分析:dp[i][j]表示第i位上数字为j的结果,pos表示位数,pre表示上一位数,lead表示是否有前导0,limit表示是否为最高位代码:#include<iostream>#include<cstdio> #include<string>#incl...原创 2019-07-30 11:28:39 · 215 阅读 · 0 评论