DP 与集合幂级数做题记录
文章目录
Max Correct Set
证明 周期
改成从中选择数也是等价的。
本题的难点在于证明:存在一种最优解使得其周期为。
有了这个就可以写一个状圧 DP:表示考虑在中选一个合法的集合,其中最后的个数的选择状态是的最优解。
记表示中为的数的个数。用这个辅助 DP 的转移即可。
Neko Rules the Catniverse
状圧 矩阵乘法
不妨把条件改成。
设表示考虑了,序列长度为,且的使用状态是的方案数。
每次转移要么不选,要么把放到序列末尾,要么放到某个数的前面()。
然后使用矩阵乘法优化静态转移即可。
时间复杂度。
The Celebration of Rabbits
FWT
由于序列长度是奇数,因此对于一个序列最多有个使得其异或和为。因此我们可以枚举,把值域变成。这样问题就转化成个数异或和为的方案数。直接 FWT 即可。
做这题的时候这 OJ 好像出问题了。不保证代码正确性。
Bank Security Unification
DP 缩减状态
我们用表示题目中的序列。
朴素的 DP 是设表示前个数的答案。暴力转移的复杂度是的。
考虑缩减状态。设表示的最高位。那么对于以结尾的最优解,一定不存在,使得。否则我可以把加进来使得答案更大。
根据上述发现,我们可以设表示最大的使得的第位为。那么对于只需要考虑所有的作为转移即可。
时间复杂度。
随机二分图
容斥 状态压缩
如果只有的边,那么容易想到表示左右点集的选择情况,直接跑一个状圧 DP。状态空间大小是的(因为限定)。不过很多状态是跑不到的,因为 DP 转移时我们会强制边的某个端点处在 lowbit 的位置。
对于的边,由于无法做类似 2-SAT 计数一样的东西,那么考虑容斥。如果我们直接把它拆成两条的边,那么可以发现原本的概率变成了。于是我们要补个上去。方法是加入一条“边”连接了,出现的概率是。
对于的边同理,只不过概率是。
守卫
区间 DP
(JXOI 2018)
本题思路容易受误导。实际上与凸包、单调栈等是没有关系的。
考虑区间,我们必然会在上放一个守卫。那么设这个守卫看到的位置依次是。分析一下满足怎样的性质。
首先,,即两点连线的斜率肯定是单调递增的。
其次,对于非空区间,只有可能看到其中的一些亭子。
简要证明:如果()能看到其中的一些亭子,那么又能看到和,则也能看到其中的数,矛盾。
换言之独立了。即我们划分出了一个子问题。
这样就可以区间 DP 了。设表示区间的答案。
设在中能看见的下标最小的亭子是。划分出最靠左的区间作为子问题,那么
可以理解为:在或者上放一个守卫,取最小值。
时间复杂度。
修订记录
- 2021年5月5日 第10次修订
- 2021年4月28日 第9次修订
- 2021年4月21日 第8次修订
- 2021年4月14日 第7次修订
- 2021年4月2日 第6次修订
- 2021年4月2日 第5次修订
- 2021年3月30日 第4次修订
- 2021年3月29日 第3次修订
- 2021年3月27日 第2次修订
- 2021年3月26日 创建文章