dp 状物容斥 笔记
dp 状物容斥指的是使用 dp 来完成容斥的过程,将容斥系数拆分到每一步进行dp。
通常当你有容斥做法,且适配的子集条件较为一般,且数据范围不足通过时考虑使用 dp状物描述容斥。
来源神秘
求长度为 $n $ 值域为 \(m\) 的序列个数,满足前一个数不是后一个数的非本身的倍数。
\(n,m\leq 2000\)
直接 \(O(nm\log n)\) dp 。
发现这个做法行不通,走不下去,最多整除分块 \(m\)。
\(n,m\leq 10^5\)
考虑容斥:
枚举有几个不合法的 $a_{i-1} <->a_i $ ,设有钦定 \(f(S)\) 不合法的数的方案数为 \(f(S)\) ,\(ans = \sum f(S) \times (-1)^{|S|}\)。
那么可以将数列拆成若干个形如 一个不钦定 + 若干个钦定 段组成。
$\text{OXXXOXXOOOXO} =\text{OXXX|OXX|O|O|OX|O} $
发现容斥的子集搭配之间没有特殊的限制条件,所以进行 dp 。
\(dp(i) = dp(i-j) \times w(j)\times g(j)\)
相当于枚举最后这个钦定段的长度
\(w\) 表示长为 \(j\) 的如上的段数,\(g(j)\) 表示容斥系数,显然当 \(j\) 为奇数的时 \(g(j) = 1\) , 否则为 \(-1\)。
可以发现这种段的长度是 \(O(\log m)\) 。
时间复杂度 \(O(n\log m+ m \text{ poly log } m)\)
\(n,\leq 10^{18} , m\leq 10^6\)
每一项之和前 \(\log n\) 项相关。
可以使用矩阵优化上述转移。
时间复杂度 \(O(\log^3 m\log n+ m \text{ poly log } m)\) 。
使用不同筛法配合根号分治可以解决 \(n\leq 10^{18},m\leq 10^9\) 。
CF1728G
std 是直接容斥并计算每一项的系数
有较为优秀的多项式复杂度做法。
容斥即枚举点集 \(T\) 并钦定 \(T\) 不合法。
\(ans = \sum f(T) \times (-1) ^{|T|}\)
\(f(T)\) 可以通过计算两个相邻的钦定不被覆盖的关键点之间的方案数求出。
容易发现这个容斥是没有后效性的,之前的每个集合都可以匹配或者不匹配现在的子集。
所以考虑 dp :
\(dp(i)\) 表示前 \(i\) 个位置 的容斥答案。
\(dp(i) = dp(j) \times w(i,j)\times g(i,j)\) w 表示钦定 \([i,j]\) 内的点都不覆盖 \(i , j\) 的方案数 , g 表示容斥系数,在这里显然是 -1 。
ARC101E
虽然是二项式反演,但也用了类似的思想 :
将容斥系数分到每一步去乘。
ABC236 Ex
限制很多没法做的题,而且出现了 “两两不同” 考虑容斥。
将原问题抽象为图上问题 , 钦定某些点必须相同表现为在图上连边。
那么答案等于 \(\sum _{S \in E} f(S)\times(-1)^{|S|}\)
边子集的联通块就是要求相等的等价类。
于是有了 \(O(2^{n^2}\times \text{poly } n )\) 的做法。
边子集太大了,没法枚举,考虑点集。
因为新加入的点集可以和原本的点集对应构成点集,没有限制,所以考虑 dp 。
\(dp(S)\) 表示点集 \(S\) 考虑 \(S\) 内部的边的答案 。
类似连通图计数地,我们枚举一个点集 \(T\) 表示点 \(u\) 所在的连通块。
那么原图就变成了 \(V = S - T , T\) 了,需要考虑在这两边各选取一些子集搭配计算系数。
\(dp(S) = \sum_{u\in T, V=S-T} dp(U) \times w(T)\times g(T)\)
\(g(T)\) 表示容斥系数,在这里好像不是很能够方便地求出,但是显然只和大小相关。
枚举边数和图的连通性是可以求出,但是有简单的做法:
考虑加入 连通块 的若是一个点,则系数应该是 \(1\) 。
考虑加入 连通块 的若是两个点,则系数应该是 \(-1\) 。
考虑加入 连通块 的若是三个点,则系数应该是 \(1-3 = 2\) 。
考虑加入的 连通块 的边数,再次枚举一个连通块割出来 :若这个连通块的大小为 \(x,x\leq n -2\) ,则剩下了至少 \(2\) 个点,剩下部分的方案数是 \(2^p\) 必然是 \(2\) 的倍数,在奇数偶数条边的方案数是相同的,所以表示为一个连通块 + 一个孤点的形态,枚举孤点,所以 \(g(i)=g(i-1)*(i-1)*-1=(i-1) \times i!\)。
本文已经结束了。本文作者:ღꦿ࿐(DeepSea),转载请注明原文链接:https://www.cnblogs.com/Dreamerkk/p/17096238.html,谢谢你的阅读或转载!