2024暑假总结2
2024暑假总结(7.22-7.27):
Day1(7.22)
今天请了学长zzh来讲杂题选讲,主要是一些偏技巧类的题目,一些我认为有意义的题目如下:
- CF1028G:一道外壳为交互题,实则是dp题的题目,需要注意 这一条件,设dp状态 表示左端点为 ,用 次询问最多能询问到哪里,然后正常转移即可。
- P5163:这题首先用到了一个技巧,就是将询问倒序枚举,这样删边操作就变成了加边操作,然后又发现不能很好地维护强连通分量,于是考虑整体二分,每次加上一半的边,然后看哪些点在同一个边双里面,然后就可以做了。
- P6109:这题是一道很巧妙的题,因为求max不能差分,所以考虑用分治算法。每次有一个mid,然后处理分治区间包含的询问,每次从mid开始依次往两边加,维护区间历史最大值即可。
下午是hdu多校acm,感觉里面的题出的中规中矩,做了四道签到题之后,我和drk一人做了两道比较难的题,最终以8道题排名51。
Day2(7.23)
今天上午是考试。首先拿到题之后先去看t1,先是写了个暴力找规律,发现答案就是 ,然后证明了一下就过了。t2是一道类似埃及分数的题,但仔细想想似乎跟迭代加深没有一点关系,于是考虑改变枚举顺序,质因子较大的放在前面,然后就过了50分的暴力,t3是一道跑很多遍网络流的模板,但有个图完全随机的性质,但是我考场上还是没有想到合适的做法,只拿了30分的暴力。t4就是个dp,打了50分的暴力就没管了,最后检查了一下四篇代码,得分100+50+30+50=230。居然t2我是唯一有分的,并且拿了rk1。
下午听评讲+讲课,t2是在我的代码上加一个背包,相当于把两个做法拼起来了,t3要写一个最普通的dfs网络流,因为图随机所以跑很快,而不应该写dinic。t4是容斥+dp,是一个数学题。
讲课还是杂题选讲,放一道有意思的:
- CF1188D:本题如果正常的dp的话是 的,但是有个性质,就是第 位能进位的一定是前面的数更大的,即是排序后的一个后缀,所以只需要记录一个数来表示哪些会进位即可
Day3-4(7.24-7.25)
这两天请了金牌gzy来讲dp,还是放一些有意义的题目:
-
uoj37:这道题是强连通分量计数,具体做法是设 表示 个点形成一整个强连通分量的数量, 表示形成奇数/偶数个强连通分量的情况, 是很好递推的。求 的话首先容斥,变为总数减缩点后为 DAG 的数量,这可以沿用 DAG 计数的思路,即枚举所有入度为 的点,做一个二项式反演即可。
-
CF1608F:这道题我写了一篇题解,就直接复制过来:
首先还是转化为前 个数的 在区间 内。
我们用 dp 数组 表示处理到了第 个数,当前的 mex 为 ,大于 mex 一共有 个不同的数。这里我们并不关心大于 mex 的数具体是哪些,而只关心有多少个,因为只要满足大于 mex 一共有 个不同的数,方案数都是一样的,我们只需要记录这个一样的方案数即可。注意这里钦定了这 个数的顺序,即这 个数是有序的(看不懂的话可以根据下面的转移来理解)。
根据定义,考虑有哪些方式能转移到 :
- 这个位置填了一个之前已经出现过的数,这样的数共有 个,所以转移为
- 这个位置填了大于 mex 且之前没有出现过的数,那肯定是由 转移过来,因为原先有 个数,而数是有序的,所以新加的数与这 个数的相对顺序共有 种,所以转移为
- 第三种情况也是本题的核心,即这个位置填了 mex,这样子我们并不知道有哪些状态能更新到。这时就需要辅助数组 ,用 表示填到了第 个数,小于 的数都出现过,大于等于 共有 个不同的数。
这样 怎么辅助数组 来转移呢?具体流程为,先处理前两个转移,同时更新数组 ,然后再用 来更新 的第三个转移。
- 对于 到 的转移,即这个位置填了 mex,显然有
- 对于 到 的转移,那么对 分两种情况,即是否出现了 这个数。如果出现了,那么应该转移 ,如果没有出现,那么应该转移
最后统计答案,对于 ,由于我们没有关心这 个数具体是啥,所以要在剩下的 个数中选 个,因为已经钦定了 个数的顺序,所以 对答案的贡献为
-
CF1616H:这题如果正常去做dp的话是行不通的,因为两个子树会互相关联,这时候就一定要大胆猜测:用 表示在子树 里面选若干个数满足条件的方案数,转移就枚举当前这一位是啥分类讨论,然后你惊奇的发现互相关联的 一共只有 种,然后就可以做了。
-
CF1874D:首先这道题需要先做一个数学问题,将题目中的期望转化为关于 的式子,然后你现在需要让这个结果最小,于是就有了一个很简单的 的 dp。简单分析一下可得 是单调不降的,那么每一个 就是有上界的了,每个 的上界加起来是调和级数,即 ,于是就将时间复杂度优化到了
Day5-6(7.26-27)
这两天就主要是复习了,我把前面讲的杂题,dp题,和相关算法,比如整体二分,cdq分治,都写了一下,感觉收获还是比较大的。
总结:
对于dp题,首先肯定是想一个暴力,比正解复杂度高很多也没有关系,然后一层一层地优化,具体优化方法有:数据结构优化,看每一维地上下界之类的,看总状态数一共有多少。然后如果设一个数组表示不出来,可以用一个辅助数组来转移。对于dp的技巧,主要还是要多刷题才能掌握。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】