【COCI2011-2012#6F】KOŠARE
阿新 • • 發佈:2021-07-01
題意
https://www.luogu.com.cn/problem/P6442
有 \(n\) 個箱子、 \(m\) 種禮物,第 \(i\) 個箱子裡有 \(k_i\) 種禮物。需要選出一些箱子,要求每一種禮物至少出現在一個箱子中。求可行的方案數 \(\mod 10^9+7\) 。
社論
輸入複雜度略大,如果全部記下來留給後面遍歷幾乎是不可能的,注意箱子的標號是一個無用資訊,禮物的組成方案一共就 \(2^m-1\) 種,開個陣列 \(\text{cnt}\) 去記一下每類的數量即可。至少出現在一個箱子中 看起來是一個“並”運算,所以考慮集合並卷積,輸入就轉化成了\(2^m\) 個只有兩項的集合生成函式,即 \(\forall state\in 2^U\)
設 \(F(z)=\prod_{state\in2^U} f_{state}(z)\text{,注意此處乘法代表集合並卷積}\)。我們最終需要求的即
\[ [z^U]F(z) \]對 \(F(z)\) 作莫比烏斯變換,就有
\[ [z^S]\hat{F}(z)=\prod\limits_{state\in2^U} [z^S]\hat{f}_{state}(z) \]最終需要求的即
\[ [z^U]F(z)=\sum\limits_{T\subseteq U}(-1)^{|U|-|T|}[z^T]\hat{F}(z) \]所以關鍵就是把 \(\hat{F}(z)\)
於是
\[ \begin{aligned} [z^S]\hat{F}(z)&=\prod\limits_{state\in 2^U}(1+[state\subseteq S](2^{\text{cnt}_{state}}-1))\\ &=\prod\limits_{state\subseteq S}2^{\text{cnt}_{state}}=2^{\sum_{state\subseteq S}\text{cnt}_{state}} \end{aligned} \]對於 \(\sum_{state\subseteq S}\text{cnt}_{state}\)
SoSDP
在 \(O(m2^m)\) 的時間內求出的,而 \(\sum_{state\subseteq S}\text{cnt}_{state}\) 的上界其實就是 \(n\) ,所以可以 \(O(n)\) 預處理出 \(2\) 的冪。總複雜度 \(O(m2^m+n)\) 。
總結
日常被容斥腳踩。