二项式反演
证明可以容斥证,但是咕咕咕。
其中第二种式子有一个常有的组合意义,\(f_i\) 表示钦定 \(i\) 个条件满足的答案,\(g_i\) 表示恰好 \(i\) 个条件满足的答案。
关于“钦定”的定义
钦定指的是若干条件中,确定了一些特定的条件必定满足,剩余条件可满足可不满足的方案数。
钦定是近似于至少的,但是有本质不同。
如 \(5\) 个条件 \(S_1, S_2, S_3, S_4, S_5\):
那么如果 \(S_1, S_2, S_3\) 成立,会对“钦定 \(1\)” 产生 \(3\) 的贡献,对"钦定 \(2\)"产生 \(3\) 的贡献,对“钦定 \(3\)” 产生 \(1\) 的贡献。
但是,它对“至少 \(1\)”、“至少 \(2\)”、“至少 \(3\)” 都只产生 \(1\) 的贡献。
等号左侧组合意义显然,即我们在 \(j\) 个条件中选择 \(i\) 个钦定,就能从恰好转钦定。
但是,我们常用的 dp 等手段容易算出钦定而非恰好或至少,此时运用二项式反演可以实现钦定转恰好。
不过二项式反演也不一定用来钦定转恰好,很多时候可以推式子然后注意到这是二项式反演形式。
P4859 已经没有什么好害怕的了
题意
给两个长为 \(n\) 的序列 \(a,b\),分别把两个序列中的数以任意顺序排列,使得 \(\sum [a_i \gt b_i] - \sum [a_i \lt b_i] = k\)。
求方案数。
\(n, k \le 2000\),保证 \(a,b\) 的所有数字不重复。
做法
显然可以转换为求 \(\sum [a_i \gt b_i] = \frac {n + k} 2\) 的方案数,满足了这个剩下的自动满足。
令 \(f_i\) 为钦定 \(i\) 个位置满足 \(a \gt b\),\(g_i\) 为恰好 \(i\) 个位置满足 \(a \gt b\)。
我们通过 dp 的方式求出 \(f\),转移顺序是 \(a\) 数组下标从前往后。
\(dp_{i,j}\) 表示考虑 \(a\) 数组的前 \(i\) 个,匹配出了 \(j\) 组。
为了方便计算 \(a_i 能匹配的 b 的个数\),将 \(a,b\) 序列都排序,维护 \(cnt_i\) 表示 \(\sum \limits _ {j = 1} ^ n [a_i \gt b_j]\)。
那么 \(a_i\) 能匹配 \(cnt_i - j + 1\) 个 \(b\)(以前的 \(a\) 一定匹配到 \(cnt_i\) 个之一)。
转移:
二项式反演: