数位dp
文章平均质量分 66
issue是fw
19 years old, struggling in life, chasing daydreams.
展开
-
HDU 6659 Acesrc and Good Numbers(缩放构造+数位dp)
LINK 题意 定义f(d,n)f(d,n)f(d,n)表示1,2,3...n1,2,3...n1,2,3...n所有数字的数位出现ddd的次数和 若f(d,n)==nf(d,n)==nf(d,n)==n说这个数字是ddd好数 现在问,不大于xxx的最大ddd好数是谁 1<=d<=91<=d<=91<=d<=9 首先数位dpdpdp可以算f(d,x)f(d,x)f(d,x)的值记作dp[i]dp[i]dp[i] 若x==dp[x]x==dp[x]x==dp[x],直接输原创 2021-03-27 16:33:20 · 182 阅读 · 0 评论 -
2019牛客多校第七场 Pair(数位dp)
link 题意 给出A,B,CA,B,CA,B,C,找出合法的(x,y)(x,y)(x,y)使得1<=x<=A&&1<=y<=B1<=x<=A\&\&1<=y<=B1<=x<=A&&1<=y<=B x&y>Cx\&y>Cx&y>C x⊕y<Cx \oplus y<Cx⊕y<C 其中A,B,C<=109A,B,C<=10原创 2021-03-27 14:32:27 · 217 阅读 · 0 评论 -
J. Junior Mathematician(数位dp)
LINK 设xxx在十进制下有kkk位 定义f(x)=∑i=1k−1∑j=i+1kd(x,i)∗d(x,j)f(x)=\sum\limits_{i=1}^{k-1}\sum\limits_{j=i+1}^kd(x,i)*d(x,j)f(x)=i=1∑k−1j=i+1∑kd(x,i)∗d(x,j) 其中d(x,i)d(x,i)d(x,i)表示xxx的第iii位数字 若xxx和f(x)f(x)f(x)在模mmm下同余说这个数合法,问[L,R][L,R][L,R]中有多少合法的数 定义f[i][j][k][原创 2021-03-27 13:22:31 · 398 阅读 · 0 评论 -
HDU 2015沈阳Matches Puzzle Game(数位dp)
LINK 给nnn根火柴,求等式a−b=ca-b=ca−b=c的个数 稍微转化一下,问题等价于求b+c=ab+c=ab+c=a的个数 我们可以枚举原创 2021-03-25 20:10:15 · 221 阅读 · 0 评论 -
#6274. 数字 (数位dp)
传送门 我的想法比较暴力了 利用记忆化搜索用四个变量维护当前x,yx,yx,y卡不卡下界,卡不卡上界 那么枚举第lenlenlen位的xxx为iii,yyy为jjj时 满足i∣j==ki|j==ki∣j==k,其中kkk是TTT的第lenlenlen位 而且要求x⊕yx\oplus yx⊕y的不同可能情况 每一位要么是000,要么是111,只需要往这两个方向搜索就行了 有(1,0)(1,0)(1,0)和(0,1)(0,1)(0,1)是有交集的 全部算的话肯定算重复了,因为他们或相同且异或相同 选111的那个原创 2020-11-18 19:19:48 · 356 阅读 · 0 评论 -
P4317 花神的数论题(数位dp模板)
传送门 这个很简单啊… 回忆一下数位dpdpdp吧,以前学的太快了,都忘记了. 值得一提的是快速幂的指数不能取模 #include <bits/stdc++.h> using namespace std; #define int long long const int mod = 10000007; int n,a[65],f[65][65][2]; int quick(int x,int n) { int ans = 1; for( ; n ; n>>=1,x = x*x%mo原创 2020-11-12 10:43:08 · 256 阅读 · 0 评论 -
P3413 SAC#1 - 萌数(数位dp)
传送门 还是比较裸的… 一看回文,发现不好表示状态啊!! 但是发现,不管回文串怎么样 都是在原来的基础上在左右两端添加一个相同的字符形成的 所以所有的回文串都是由长度为2的回文串(0偶数)和长度为3的回文串组添加得到的 换而言之只需要判断前一个数字和前前的数字即可 注意前导零 #include <bits/stdc++.h> using namespace std; #define int long long const int maxn=1009; const int mod=1e9+7;原创 2020-10-19 21:21:41 · 268 阅读 · 0 评论 -
牛客小白月赛 dh的帽子(上下界模板数位dp)
dh的帽子 就是个模板,但是我脑子抽了 感觉白学了数位dp,连个模板都,不会 不想解释了,代码写的很清楚 就是用3个维度维护是否大于下界,3个变量维护是否小于上界 #include <bits/stdc++.h> using namespace std; #define int long long int a[39],b[39],dp[49][2][2][2][2][2][2]; int dfs(int len,int is1,int is2,int is3,int lim1,int lim2,原创 2020-10-07 12:21:40 · 359 阅读 · 0 评论 -
XHXJ‘s LIS(数位状压好题)
题目传送门 首先你要会nlogn的上升子序列首先你要会nlogn的上升子序列首先你要会nlogn的上升子序列 然后考虑怎样保存前面的上升子序列信息然后考虑怎样保存前面的上升子序列信息然后考虑怎样保存前面的上升子序列信息 直接存肯定吃不消,考虑状态压缩直接存肯定吃不消,考虑状态压缩直接存肯定吃不消,考虑状态压缩 因为最多是[0,9]的10个数字,所以用第i位二进制表示i是否在上升子序列中因为最多是[0,9]的10个数字,所以用第i位二进制表示i是否在上升子序列中因为最多是[0,9]的10个数字,所以用第i位二原创 2020-08-21 10:22:55 · 298 阅读 · 0 评论 -
牛客:Beautiful Numbers(数位dp)
题目传送门 应该是老套路了 因为要求对数位和取模为0,但是模数不固定,怎么取模? 模数不固定,那就枚举模数,因为位数最多12位,每位都是9不过108 那我们定义dp[len][mod][yu][he]为那我们定义dp[len][mod][yu][he]为那我们定义dp[len][mod][yu][he]为 还剩len位数字,最终数位和是mod,当前数位和是he,当前对mod取模为yu还剩len位数字,最终数位和是mod,当前数位和是he,当前对mod取模为yu还剩len位数字,最终数位和是mod,当前数位和原创 2020-08-21 09:36:59 · 313 阅读 · 0 评论 -
HDU3709 Balanced Number(数位)
其实是一道很基础的dp 主要是平衡点的位置不好确定主要是平衡点的位置不好确定主要是平衡点的位置不好确定 那么不妨枚举平衡点的位置是center那么不妨枚举平衡点的位置是center那么不妨枚举平衡点的位置是center 遍历到center前面是,加上值遍历到center前面是,加上值遍历到center前面是,加上值 遍历到center后面,减去值遍历到center后面,减去值遍历到center后面,减去值 就很常规了就很常规了就很常规了 #include <bits/stdc++.h> usin原创 2020-08-20 23:07:45 · 240 阅读 · 0 评论 -
D. Beautiful numbers(巧妙数位dp,lcm性质)
这题真的非常巧妙,这是第二次做了,还是不会,哎 首先难点,肯定不能把每一位的数字保存下来,但是又要保存他们的信息首先难点,肯定不能把每一位的数字保存下来,但是又要保存他们的信息首先难点,肯定不能把每一位的数字保存下来,但是又要保存他们的信息 发现之和求余有关.....最小公倍数!!发现之和求余有关.....最小公倍数!!发现之和求余有关.....最小公倍数!! 假如对每一位求余为0,对lcm求余也为0!!假如对每一位求余为0,对lcm求余也为0!!假如对每一位求余为0,对lcm求余也为0!! 这样我们解决了原创 2020-08-20 22:27:12 · 329 阅读 · 0 评论 -
HDU3652 B-number(数位DP)
板子题 定义dp[len][sta][yu]为定义dp[len][sta][yu]为定义dp[len][sta][yu]为 枚举到第len位,sta=1表示上一位是1,sta=2表示包含13,yu表示当前对13求余的数枚举到第len位,sta=1表示上一位是1,sta=2表示包含13,yu表示当前对13求余的数枚举到第len位,sta=1表示上一位是1,sta=2表示包含13,yu表示当前对13求余的数 注意一下当sta=2时就不需要再去更新了注意一下当sta=2时就不需要再去更新了注意一下当sta=2时就原创 2020-08-20 21:25:50 · 175 阅读 · 0 评论