813D:
题意:给出长度为
的序列,从中找出
个子序列,满足每个子序列相邻两数之间要么相差
,要么同余于
,求这两个子序列的最长长度和。
题解:DP优化主要考虑状态的减少和转移的加快,这个题
表示分别以
、
为结尾的子序列最长长度和的状态不能减少,考虑优化转移。防止一个位置被重复选择,要强制限制
,那么固定
,
实际上是从前面的某个
转移过来,所以可以通过维护
、
表示
的最大
和
的最大
,即可实现
转移。
796E:
题意:有
道题目,有两个人分别会做某些题目,有
次偷看机会,每次可以偷看某个人最多连续
道题目,求最多偷看几道题目。
题解:
表示前
道题目,用了
次偷看机会,第一个人还可以看
道,第二个人还可以看
道即可。
534F:
题意:一个只有黑白格子的矩形,给出每行每列的连续的黑色格子段数,还原出这个矩形。
题解:比较简单的一道题目,但是还是卡了卡。首先状态压缩DP很好想,就一列一列填就行了,但是这个做法TLE了,原因是状态数太多,一个状态能被很多个状态转移到,所以考虑倒着来,做记忆化搜索就行了,因为这样找到一个合法的就会结束了。
946G:
题意:给出
个数,问最少把多少个数改成任意整数后,使得之后的
个数能通过去掉一个数,成为一个严格上升序列。
题解:套路都忘光了……如果最后要求的是一个不降序列,问题就简单了,那么我们就通过每个位置
实现这一转化。然后对于删数这个操作,实际上是使被删数后面的数由
变成
,用两个DP数组分别维护删了数和没删数的最长不降序列即可。
856C:
题意:给出
个数,把这
个数拼起来成为一个数,求
种方法中有多少是
的倍数。
题解:首先有性质:一个数奇数位数上的和与偶数位数上的和的差的绝对值为
的倍数,这个数即为
的倍数。对于每个数,它原来的奇数位和偶数位可能会在最后的答案中倒过来,易得若
个中有
个奇数位数的数,那么有
个奇数的贡献是要倒过来的,偶数位数的数的贡献则可以任意,那么分别对奇数位数的数和偶数位数的数DP一下,
表示前
个有
个贡献反过来,余数为
的方案数即可,最后把偶数插进奇数中。
178F2:
题意:给出
个字符串,选出其中恰好
个组成一个集合,定义集合的权值为字符串两两之间最长公共前缀之和,求权值最大值。
题解:建出字典树的虚树,在上面DP即可。
946F:
题意:定义
表示一个
串,
,
,
,
表示字符串的拼接,给出一个
串,求其在
的所有子序列中的出现次数之和。
题解:字符串匹配可以考虑区间DP,
表示
在
的所有子序列中的出现次数之和,分情况讨论转移即可。
958C3:
题意:给出
个数,把他划分成恰好
段,求每段的和
之和的最小值。
题解:暴力DP:
表示前
个数划分成了
段,
,可以按照
与
的大小关系分类讨论,用数据结构优化,但是还不够,可以对于每个余数维护最小值,再用数据结构维护,那么
变为
,可以通过。
875E:
题意:有两个快递员
,
,他们的初始坐标为
,
,有
个需要送的地点坐标为
,按照派送优先顺序编号。求两个快递员派送过程中相隔最大距离的最小值。
题解:二分答案,考虑如何检验。从前面开始不会搞,倒过来搞。这样我们不需要知道谁在送货,只需要维护当其中一人在
时,另外一个人的区间即可。
643E:
题意:一开始有只有根节点,支持两种操作:1、插入一个节点,以当前某节点为父亲。2、询问以某个节点为根的子树,若每条边有
的概率断掉,期望的最大深度是多少(在误差范围内即可)。
题解:首先很重要的一点,若深度太大,那么概率就会小的可以忽略不计,所以实际有用的层数不会太多,这应该是概率DP中不错的套路。那么直接
表示以
为根节点,最大深度为
的概率即可。
888F:
题意:给出
到
的点两两之间的边是否可以连,求连成一棵树且不存在两条边
、
满足
的方案数。
题解:直接
表示把
到
连起来,且
和
必须有边相连方案数,
表示把
到
连起来方案数,互相转移即可。
1034C:
题意:给定一棵树,每个点有一个点权
。整棵树是第
级划分。定义第
级划分是将第
级划分中的每个区域划分成至少两个新的区域,并且所有区域都是一个连通块,每个点在每一级中只属于一个区域,在同一级划分内每个区域内的点的点权和相等。一种划分方案包含它划分的每一级。两种划分方案不同当且仅当它们划分的级数不同,或者存在一个点在某一级中它们在两种划分方案中属于不同区域。
题解:感觉这个题跟之前的某个把树划分成若干个点数相同的块有点类似,策略是一样的,若每块的点权和是
,那么当某棵子树权值和达到
时就砍掉这棵子树,所以对于每个
都只有一种方案划分。
表示子树权值和
的
有多少个,然后再用
表示最后分成
块的方案数即可。关键是如何求
。暴力是
的,考虑求出对于每棵子树最小合法的
,这样有且仅有任意正整数倍的
都是合法的,那么这个
显然会
(这题比较难啊)。
708E:
题意:(最好结合图理解)每天除上下两排,最左边和最右边的每个方块都有概率消失,求最后这个图形连成一块的概率。
题解:比较简单的DP是这样的:
表示到第
行,剩下了
的方块的概率,转移可以用前缀和优化做到
,但是这样光是状态就是
的,没有前途。我们最后要求的是
,考虑直接DP某个前缀和,不求
,那么这样就可以做到
,也是个不错的优化方法吧。
886E:
题意:求
的排列有多少满足:从左到右扫求最大值,当最大值不再变化
次后的最大值不为
。
题解:计数题还是不会啊,也不太会思考,只能多做了。
表示
个数,最大数放在最后的合法方案数。转移就考虑次大数放的位置即可。
908G:
题意:定义
为
的各个位数字从小到大排形成的数,前导
忽略,如
,
,求
。
题解:考虑计算每个数字的贡献,比如
,我们这样计算:在第
位填
的时候分别加上
的贡献,那么每个数字的贡献就是最后大于等于它的数字个数,如果有
个,那么这个贡献就是
,也就是
个
,那么直接数位DP就行了。
367E:
题意:求选出
个区间
,使得所有
,且区间之间没有包含关系,至少有一个区间左端点为
的方案数。
题解:
表示到了第
个数,左端点有
个,右端点有
个的方案数,那么一个数可以分四种情况转移。对于这种二元组的题,不一定要一组一组取,还要考虑一个一个取。
436D:
题意:无限长的数轴,上面放着
个布丁,相邻两个布丁会黏在一起,移动任意一块另外一块也会移动,每次你可以向左或向右移动一块布丁,这块布丁会一直运动到撞到一块布丁为止,然后他们就黏在一起了,数轴上有
个特殊点,你可以做无数次操作,求最多能覆盖多少个特殊点。
题解:
表示前
个布丁最多覆盖点数,
表示部分靠到
的情况下最多覆盖点数,直接DP即可。