染色问题相关

染色问题是一类经典的二项式反演问题。

问题 \(1\)

\(n\) 个格子,\(k\) 种颜色,相邻格子颜色不同,且每个颜色至少出现一次,求方案数。

\(g_k\) 表示恰好出现 \(k\) 个颜色的方案数,\(f_k\) 表示至多出现 \(k\) 个颜色的方案总数,若第 \(i\) 位为颜色 \(j\),第 \(i+1\) 位能选择除了颜色 \(j\) 以外的所有颜色。所以 \(f_k=k\times (k-1)^{n-1}\)。对于恰好出现 \(i\) 个颜色的情况,有 \(\binom{k}{i}\) 种颜色的选择方案。所以 \(f_k=\sum\limits_{i=0}^k\binom{k}{i}g_i\),反演得到 \(g_k=\sum\limits_{i=0}^k(-1)^{k-i}\binom{k}{i}f_i\)。总复杂度为 \(O(k\log n)\)

问题 \(2\)

\(n\times m\) 个格子,\(1\) 种颜色,每行每列至少有一个格子被染色,求方案数。

\(g_{i,j}\) 表示恰好有 \(i\)\(j\) 列有格子被染色,\(f_{i,j}\) 表示至多有 \(i\)\(j\) 列被染色的方案,一个节点可以选择是否被染色,\(f_{i,j}=2^{i\times j}\),从 \(n\) 行中选出 \(n-i\) 行被染色,方案有 \(\binom{n}{n-i}\) 种,再从 \(m\) 列中选出 \(m-j\) 列被染色,方案有 \(\binom{m}{m-j}\) 种。\(f_{n,m}=\sum\limits_{i=0}^n\sum\limits_{j=0}^m\binom{n}{i}\binom{m}{j}g_{i,j}\),反演得到 \(g_{n,m}=\sum\limits_{i=0}^n\sum\limits_{j=0}^m(-1)^{n-i+m-j}\binom{n}{i}\binom{m}{j}f_{i,j}\)

问题 \(3\)

\(n\times m\) 个格子,\(c\) 种颜色,每行每列至少有一个格子被染色,每种颜色至少出现一次,求方案数。

\(g_{i,j,k}\) 表示恰好有 \(i\)\(j\) 列被染色且染了恰好 \(k\) 种颜色,\(f_{i,j,k}\) 表示至多有 \(i\)\(j\) 列被染色且染了至多 \(k\) 种颜色,一个节点可以不染色或染任意一种颜色,\(f_{i,j,k}=(k+1)^{ij}\)\(f_{n,m,c}=\sum\limits_{i=0}^n\sum\limits_{j=0}^m\sum\limits_{k=0}^c\binom{n}{i}\binom{m}{j}\binom{c}{k}g_{i,j,k}\),反演得到 \(g_{n,m,c}=\sum\limits_{i=0}^n\sum\limits_{j=0}^m\sum\limits_{k=0}^c(-1)^{n-i+m-j+c-k}\binom{n}{i}\binom{m}{j}\binom{c}{k}f_{i,j,k}\)

可以自然地总结出一个套路,先钦定恰好,再由恰好得到至多,这个至多一般是比较好算的,再反演得到由至多推的恰好的式子,这样起码可以得到一个poly而不是质数级的式子,剩下的部分再通过其它数学手段求得。

文章参考并补充总结自:

posted @ 2023-05-29 00:09  luo_shen  阅读(287)  评论(0)    收藏  举报