![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数位动规
文章平均质量分 55
WerKeyTom_FTD
我是一只来自中山纪念中学高三的oier,请多多指教
展开
-
光棍
题目大意求l~r间所有不满足以下三个条件的所有数的平方和。 1、某一位为a。 2、是a的倍数。 3、各位数字之和是a的倍数。 l,r<=10^18。数位DP用f[i][j][k]表示一个状态,这个状态是当前做到第i位,数字和除以a的余数为j,除以a的余数为k。再加一维0..2分别表示个数、和、平方和。 那么转移方程显然,且枚举的时候不要枚举a。 注意到要求l~r之间的,这个可以转化为1~原创 2015-10-06 16:38:25 · 634 阅读 · 0 评论 -
[CF750G]New Year and Binary Tree Paths
题目大意一颗无穷个节点的完全二叉树,编号满足线段树分配。 求有多少条树上的简单路径编号和为s?结论从根节点到一个编号为x的节点,到根编号和为2x-bitcount(x)。 用归纳法证明。 我们尝试枚举这条简单路径两个节点到lca分别的距离为a和b,设lca为x。 首先一定有x∗(2a+1+2b+1−3)x*(2^{a+1}+2^{b+1}-3)的编号和。 然后我们尝试把x子树所有编号都去掉原创 2017-09-14 17:20:04 · 539 阅读 · 0 评论 -
[bzoj3492]Binary Dodgeball
结论我把乘2^k变成除以的话和原游戏当然是等价的。 这样的话我们把每个数二进制都写出来,每次就是去掉末尾几个0。 按照除lowbit部分分组,不同组之间互相独立。 每组的游戏可以这样描述: 有一群石子堆,每次从一个石子堆拿走至少一颗石子,若存在两堆相同的石子堆,则一起移走。 没有后面那个的话很容易知道就是nim游戏。 但其实我们可以把移走的两堆绑在一起,那么一个人操作其中一堆,另一个人就原创 2017-03-16 16:50:27 · 510 阅读 · 0 评论 -
[51nod 1587]半现串
题目描述http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1587AC自动机上的DP把S所有长度是d/2的提出来造个AC自动机。 然后做数位DP,用一维状态表示匹配到AC自动机上哪个节点。 匹配成功状态不要转移。 于是可以计算出不匹配的数量。#include<cstdio>#include<algorithm>#in原创 2017-01-12 20:26:10 · 442 阅读 · 2 评论 -
[51nod 1587]半现串
题目大意有两个串S,T。T的长度是d。我们说T在S中半现的条件是当T的某一个长度为 ⌊d/2⌋ 的子串是S的一个子串。(子串是在原串中连续出现的一段字符串)。 现在给定一个原串s,另外给出x,y,他们都只包含数字字符,问区间[x,y]中在s中半现的数字有多少个。经典套路先转化为补集问题。 将S所有长度为d/2的串弄个AC自动机,然后做数位DP,f[i,j]表示做到第i位匹配到状态j。 匹配成功原创 2016-12-21 20:35:53 · 573 阅读 · 0 评论 -
[51nod1301]集合异或和
题目描述已知两个整数N与M,你需要构造两个整数集合X与Y,且需要满足以下要求: (1)对所有的xi∈X,满足1<=xi<=N;对所有的yj∈Y,满足1<=yj<=M; (X与Y可以为空集) (2)X∩Y=Φ;(但不要求集合X与Y的元素个数,只要两者没有交集即可)不妨设构造后的集合X含有n个元素,而集合Y有m个元素,令 A=x1 xor x2 xor x3 xor … xor xn, B=y1原创 2016-12-06 16:49:16 · 2015 阅读 · 0 评论 -
[51nod 1425]减减数
题目描述初始给定一个整数n。每次可以对其做一个操作,这个操作是将n减去他其中的某一位。得到新的一个数字n’,然后继续操作,直到他变成0为止。 比如24这个例子,24 → 20 → 18 → 10 → 9 → 0题解具体看这题小W的数字#include<cstdio>#include<algorithm>#include<map>#define fo(i,a,b) for(i=a;i<=b;i原创 2016-11-04 20:14:58 · 643 阅读 · 0 评论 -
小W的数字
前言%%%dwx %%%dwx %%%dwx %%%dwx %%%dwx题目描述记忆化搜索如果设step(n)表示n减到0的最小操作次数,显然step有单调性。 我们设f[mx,n]表示把n减到0的最小操作次数,mx表示的是比n最高位还高的那些位的最大值。 现在我们可以固定最高位,把剩余位减到0,也就是递归计算,返回二元组(cost,dp)表示操作次数为cost,最终还可以额外减掉一个d原创 2016-06-30 16:24:11 · 852 阅读 · 0 评论 -
求生之路
题目描述历经千辛万苦,pty终于打开了金字塔的锁。稍稍适应了外面刺眼的光线,pty抬头望去,眼前竟是一条不见尽头的狭长通道。这时候背后响起了奇怪的窸窣声,原来是金字塔内绿眼黑身的怪物追了过来。Pty来不及多想,便拼命往前奔去。通道狭窄又曲折,时不时还有断裂,不过Pty凭借TempleRun练成的娴熟技巧轻松通过。眼看着离怪物们越来越远时,一棵参天大树突然耸立在了道路中央,大树摆了摆身子,用苍老的声音原创 2016-05-18 20:16:55 · 580 阅读 · 0 评论 -
[bzoj4513][SDOI2016]储能表
题目大意求∑n−1i=0∑m−1j=0max(i xor j−p,0)\sum_{i=0}^{n-1}\sum_{j=0}^{m-1}max(i\ xor \ j-p,0)数位DP首先先把n和m都减一。 接着分解成二进制。 设f[i][s1][s2][s3][s4]表示做到第i位,此时有多少二元组(a,b)满足以下条件: s1=0,目前a已经小于n。s1=1,目前a等于n。 s2=0,目前原创 2016-04-28 20:20:29 · 1231 阅读 · 0 评论 -
[bzoj3530][SDOI2014]数数
题目描述求不大于N的所有正整数中有多少个满足以下条件的数:给定字符串集合S,把该数当作字符串(没有前导0),集合S中没有任意一个字符串是该字符串的子集。 N的长度不超过1200,集合中所有字符串长度和不超过1500。AC自动机上的DP将集合内所有字符串建出一颗AC自动机。 那么,我们需要预处理一个这样的next[i,j]表示在结点i上接下要走j的话会调整到的结点是什么。(即预处理所有可能出现的调原创 2015-12-30 19:53:24 · 785 阅读 · 0 评论 -
[GDKOI2016]QT与泰剧
题目大意给定高精度数S和T,求出T+1~S中所有满足对模3与S同余且每一位皆不为质数的数的个数。数位DP裸的。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std原创 2016-03-01 22:04:48 · 1074 阅读 · 0 评论 -
[agc017f]Zigzag
前言DP题,我当然不会啦。题目大意请你找到m个n位二进制数,对于相邻两个,i+1的前j位的和不小于i的前j位的和。 此外还有对于某个二进制数某位必须是几的若干个限制。DP很容易想到设dp[i,s]表示做到第i个二进制数第i个是s,每次枚举前一个,复杂度很大。 转移复杂度太大了,我们来尝试优化。 如果可以不用枚举前一个就好了。 那么不如让前一个对着当前的改变吧! 设dp[i,j,s]表示做到原创 2017-10-06 16:42:10 · 576 阅读 · 0 评论