
数位DP
notmuch
这个作者很懒,什么都没留下…
展开
-
洛谷P2657 [SCOI2009]windy数(数位DP)
数位DP入门题,关于数位DP,可以参考下面几个博客:https://walesexcitedmei.github.io/2018/10/30/浅浅浅谈-数位-DP/https://www.luogu.org/blog/virus2017/shuweidphttps://blog.youkuaiyun.com/wust_zzwh/article/details/52100392个人觉得第一二个会比较好懂...原创 2019-07-24 16:22:50 · 188 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场)H(数位DP)
满足要求的<x,y>有两种情况:1.x&y >C;2.x^y < C;其中1<=x<=A, 1<=y<=B.涉及到位运算,我们首先把A,B,C写成二进制,其次,要明确的一点就是,我们任找某个x,y,假设我们现在在进行&运算,并且是从高位到低位运算的,运算到二进制中的第k位时,如果此时k上的数字num, num>C[k] ...原创 2019-08-09 15:14:36 · 151 阅读 · 0 评论 -
HDU3652,B-number(数位DP)
用数位DP。状态:dp[i,j,k,state]表示枚举到第i位时,前一位数字为j,前面各个数字组成的数mod13=k,当前是否包含“13”串(state=0否state=1是),符合条件的数字的总个数边界:return (state && !k)? 1:0代码如下:#include<cstdio>#include<iostream>#inclu...原创 2019-08-07 12:37:46 · 150 阅读 · 0 评论 -
[HAOI2010]计数(思维+组合数)
这道题个人认为有两个较难的点:①看起来很像,非常像,感觉是数位DP,但其实不是。。。。②原题虽然说不可含前导0,但其实有前导0也是没问题的,就比如说0012,12两个是一样的数。如果明确这两点之后,再加上组合数的一点知识,这道题就可以确定解题思路了。思路:枚举。。。怎么枚举?看代码吧。。#include<cstdio>#include<algorithm>...原创 2019-08-07 12:02:48 · 156 阅读 · 0 评论 -
HDU4734,F(x)(数位DP+优化)
本题思路和DP状态不难求,比较难的是该怎么优化。数位DP的优化可参考下面的博客:https://blog.youkuaiyun.com/wust_zzwh/article/details/52100392简单的说,一般数位DP的优化有两种方法:①将memset放置在多组数据外面,即程序每运行一次只需memset一次,这种方法要求,题目所给的约束条件是每个数本身的属性,与输入无关。②相减,这种方法是稍...原创 2019-08-07 11:46:34 · 185 阅读 · 0 评论 -
HDU4507,吉哥系列故事——恨7不成妻(数位DP)
推荐博客:https://www.cnblogs.com/bxd123/p/10974247.html关键点:( i + j )2=i2 + 2 * i * j + j2, 123=1 * 102 + 2 * 101 + 3.根据上面两个式子,我们可以推出,我们需要维护两个值,一个是已经枚举出来的所有数的总和,另一个是已经枚举出来的所有数的平方的总和。代码如下:#include<...原创 2019-08-13 16:03:04 · 125 阅读 · 0 评论 -
洛谷P3413 SAC#1 - 萌数(数位DP)
题目是说回文子串长度>2就是一个萌数,那么只要判断两种情况就好:aa,aba。状态:dp[i,j,k,state=0~1]表示枚举到第i位数,前一位(即i+1)数字为j,前两位(即i+2)为k时,萌数(1)与非萌数(0)的个数。边界:state==1? return 1: return 2;#include<cstdio>#include<algorithm>...原创 2019-07-27 22:38:43 · 327 阅读 · 0 评论 -
牛客OI周赛2-提高组,好朋友(数位DP+逆向思维)
题意:有t次询问,每次询问[l,r]区间内子序列含007的数的个数,最终输出所有询问的答案的异或和。分析:数位DP很明显,但子序列含007的情况比较复杂,想了挺久都没想到怎么做,于是正难则反,我们可以反过来想想不含007的情况。不含007,也就是对于任何一个7,它前面至多只能含1个0,于是我们可以定义DP状态为,dp[i,j]表示枚举到第i位时,0出现的次数为j的数字的个数,显然,当j>...原创 2019-08-05 10:22:17 · 242 阅读 · 0 评论 -
牛客小白月赛7,D(数位DP+暴力)
题意:给定一个m,n,求出m以后第n个是7的倍数或者数字包含7的数。这是刷数位DP时刷到的,有点懵一开始,这个怎么数位DP。。。思索了一下,弄了个比较曲线的做法:如果n<=k,k为某一常数,那我直接暴力找出来就好,否则,先数位DP出[1,m]内满足条件的数的个数t1,t2=n+t1,表示要输出的数时第t2个满足条件的数,接下来不断找一个temp,对temp进行数位DP,求出[1,temp]...原创 2019-08-04 20:12:26 · 191 阅读 · 0 评论 -
洛谷P4317 花神的数论题(数位DP)
题意:给你一个数N,求出[1,N]中所有的数的二进制中1的个数的连乘。刚开始看到这道题DP状态都不太好找,但因为之前做过洛谷的另一道“同类分布”的题,后来就有了点思路。因为这道题DP状态不太好定义,不太好保存状态,所以我们可以枚举1出现的所有次数,对应出现的个数,例如,1出现的次数为k,数位DP出[1,N]内所以1次数为k的数,设其总数为num,则对应答案就是knum。#include<...原创 2019-08-04 10:43:41 · 260 阅读 · 0 评论 -
HDU2089,不要62(数位DP)
可以用数位DP,也可以暴力打表,两种都可以。状态:dp[i,j]表示枚举到第i位时,前一位(即i+1位)的数字为j时的方案数。#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace...原创 2019-07-25 11:19:24 · 113 阅读 · 0 评论 -
洛谷P2602 [ZJOI2010]数字计数(数位DP)
题意:给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。状态:dp[i,j,k]:枚举到第j位数时,数字i出现的次数为k次的所有数字中i出现的总次数。边界:dp[0~9,0,k]=k。状态转移:dp[i,j-1,k+(i==第j位的数字&&不前导0)]#include<cstdio>#include<iostrea...原创 2019-07-25 10:58:48 · 245 阅读 · 0 评论 -
洛谷P4127 [AHOI2009]同类分布(数位DP)
关于这道题的讲解可参考博客:https://www.luogu.org/blog/virus2017/p4127// luogu-judger-enable-o2#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<iostream&...原创 2019-07-29 20:10:32 · 130 阅读 · 0 评论 -
HDU3709,Balanced Number(数位DP)
题意:一个数是balanced number当且仅当它跟4139(位置编号3210)一样,当我们将pivot(不知是啥)的位置取在3的位置1时,左边4,1到3的距离和为4 * 2 + 1 * 1 = 9,右边9到3的距离9 * 1 = 9,左边与右边相等,所以称之为balanced number。求出[l,r]内这类数的个数(0<=l<=r<=1e18)首先,明确某个数到piv...原创 2019-08-07 20:36:48 · 168 阅读 · 0 评论