数位dp
文章平均质量分 92
StaroForgin
这个作者很懒,什么都没留下…
展开
-
[硫化铂]叮叮车
考场上又犯傻了。。。╮(╯﹏╰)╭原创 2022-04-05 18:06:04 · 455 阅读 · 0 评论 -
[硫化铂]未来
又被OneInDark吊打了,我的人类之躯果然不能匹敌旧神的强大。(´-ι_-`)原创 2022-03-07 21:07:37 · 323 阅读 · 0 评论 -
[CF1290F]Making Shapes
数位dp题都好诡异呀。原创 2022-01-11 20:59:10 · 135 阅读 · 0 评论 -
[CF750G]New Year and Binary Tree Paths
魔鬼数位dp原创 2021-10-11 18:58:51 · 202 阅读 · 0 评论 -
[CF509C]Sums of Digits
Sums of Digits题解由于要求逐次递增,所以只要求出比大的第一个满足条件的数即可。首先确定数字位数,通过一个全为9的数即可找到当前位数时,由于数位和是连续的,所以区间中一定有数满足条件,注意许判断是否大于上一个数,然后通过数位枚举即可。源码#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int> pii;int n,a[505],s原创 2020-08-11 17:22:02 · 152 阅读 · 0 评论 -
[CF628D]Magic Numbers
Magic Numbers题解还是一道很常规的数位dp。由于,还是需要特判一下的值,差分求答案。令为到第位,之前各数位和在模的意义下为时的方案数。由于要求的数偶数位为奇数位不为,在搜索的过程中需要特判一下,最后统计第二位为0时的值。dp的过程可以通过记忆化搜索来实现,转移方程也很好想。源码#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int原创 2020-08-11 16:47:17 · 157 阅读 · 0 评论 -
[CF855E]Salazar Slytherin‘s Locket
Salazar Slytherin's Locket题解很水的一道数位dp。在b进制下保证每个数的出现次数为偶,由于需要记录每个数出现次数的奇偶,而,很容易想到用状压来表示。至于答案还是很常规的差分套路,用记忆化搜索来进行数位dp来求出小于等于某个数的满足条件数的个数。令为进制下,在第位时状态为时满足条件数的个数。转移时还是用记忆化搜索进行,转移方程也很好想。源码#include<bits/stdc++.h>using namespace std;typed原创 2020-08-11 16:36:20 · 164 阅读 · 0 评论 -
[CF1245F]Daniel and Spring Cleaning
Daniel and Spring Cleaning题解很容易发现,原式等价于。再差分一下,。令,接下来,来考虑一下函数该怎么求。由于是二进制,很容易想到数位dp,令为在转化为二进制后,的第位为,的第位为时的满足条件的方案数。dp的转换也十分好想,判断是否达到上界即可。源码#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int>.原创 2020-08-11 15:06:15 · 112 阅读 · 0 评论 -
[CF95D]Horse Races
Horse Races题解很简单的一道数位dp答案明显可以差分出来,,但是由于数据范围太大,我们必须将单独拿出来判断一下。至于,可以用数位dp来进行求解,定义为在第位距上一个幸运数字距离为且是否满足条件的数的数量。状态转移的过程可以用记忆化搜索来实现。之后就可以很简单的解决了。源码#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int>原创 2020-08-11 14:51:45 · 213 阅读 · 1 评论 -
[SDOI2016]储能表
储能表题解很明显,这道题是暴力。好吧,很明显暴力只能拿20pts。用数位dp来完成这道题的做法还是十分普遍的。首先,我们要用二进制来表示数,毕竟有异或的操作。从第n为往前推,就表示现在是第i位,是否达到上界为n时的最大数,为m时的最大数以及为k时的最大数时的总能量。而表示此时的情况总数。那么转移式子也很好想了:,。而它总共长度为64,于是乎很快就可以得到答案了。...原创 2020-03-06 14:32:30 · 196 阅读 · 0 评论 -
手机号码
手机号码题解一道典型的数位dp,我们只需要将它的编号,是上一位,上两位,是否有三个连续,是否有4,是否有8,加入dp。我们可以用dfs,来更新数位dp。注意在dfs中加入是否达到当前最大值,来枚举当前数字。源码#include<cstdio>#include<cstring>#include<iostream> #include<a...原创 2019-10-28 18:58:49 · 330 阅读 · 0 评论