機率期望進階 + Min-Max容斥 練習題

Sktn0089發表於2024-03-19

Luogu5644 [PKUWC2018] 獵人殺

link

題意:有 \(n\) 個人,每次在剩下的人中選擇一個人殺死,選擇 \(i\) 的機率為 \(\dfrac{w_i}{\sum_j w_j}\),求第 \(1\) 個人是最後一個殺死的機率,答案對 \(998244353\) 取模。

\(w_i\ge 1,\space \sum\limits_{i=1}^n w_i\le 10^5\)

考慮容斥,列舉欽定在 \(1\) 之後死的人的集合 \(S\),那麼該機率為 \(\dfrac {w_1}{w_1+\sum\limits_{j\in S}w_j}\),容斥係數為 \((-1)^{|S|}\)

使用揹包來綜合所有的 \(S\),設 \(f[i,j]\) 表示考慮了前 \(i\) 個人,\(\sum\limits_{x\in S}w_x=j\),帶容斥係數的機率總和。

可以分治來卷積,時間複雜度 \(O(n\log^2 n)\)記錄


CF1349D Slime and Biscuits

題意:有 \(n\) 個人,第 \(i\) 個人有 \(a_i\) 個餅乾。每次隨機選擇一個餅乾,將其隨機分配給除了它現在所有者的其他 \(n−1\) 個人。求使得一個人擁有所有餅乾的期望步數,對 \(998244353\) 取模。

\(1\le n\le 10^5,\space \sum\limits_{i=1}^n a_i\le 3\times 10^5\)

\(E_u\) 表示餅乾全在第 \(u\) 個人手裡並且由 \(u\) 結束的帶機率係數期望步數。

我們要求的答案是 \(\sum\limits_{i=1}^n E_i\)。考慮計算 \(E_u\):設 \(D_u\) 表示不考慮之前是否已經結束,餅乾全在第 \(u\) 個人手裡的期望步數,\(P_u\) 表示在 \(u\) 結束的機率。

\[E_u=D_u-\sum_{v\not =u}(E_v+P_vC) \]

其中 \(C\) 表示餅乾全部從 \(v\) 轉移到 \(u\) 的期望步數,不難發現是個常數。

推式子

\[E_u=D_u-\sum_{v\not =u}E_v-C\sum_{v\not=u}P_v \]

\[\sum_{i=1}^n E_i=D_u-C\sum_{v\not=u}P_v \]

\[n\times ans=\sum_{i=1}^n D_i-C(n-1)\sum_{i=1}^n P_i \]

\[n\times ans=\sum_{i=1}^n D_i-C(n-1) \]

只需要求 \(D_{1...n},C\)

\(f[i]\) 表示一個人已經有了 \(i\) 個餅乾,獲得 \(i+1\) 個餅乾的期望步數,這個隨便推就行。

那麼 \(D_i=f[a_i],\space C=f[0]\),時間複雜度 \(O(\sum a)\)記錄


Luogu5463 隨機遊走

一棵 \(n\) 個點的樹,一開始從 \(x\) 點出發隨機遊走。有 \(Q\) 次詢問,每次給出一個點集 \(S\),求第一次經過 \(S\) 中所有點的期望時間。

\(1\le n\le 18,\space 1\le Q\le 5000\)

考慮 Min-Max 容斥,改為求第一次經過 \(S\) 中任意一個點的期望時間。

考慮預處理時列舉所有 \(S\),然後求解。設 \(f[u]\) 表示從 \(u\) 點開始走到 \(S\) 中任意一個點的期望時間,套路可知 \(f[u]\) 可以表示成關於 \(f[fa_u]\) 的一次函式。

令根為 \(x\),那麼 \(f[x]\) 的常數項就是答案。

對於詢問部分,我們可以預處理 sos dp 子集求和,時間複雜度 \(O(n(2^n+Q))\)記錄


uoj449 【集訓隊作業2018】喂鴿子

link

題意:有 \(n\) 只鴿子,每秒會等機率選擇一隻鴿子並給他一粒玉米。一隻鴿子飽了當且僅當它吃了的玉米粒數量
\(\ge k\)。求期望多少秒之後所有的鴿子都飽了。

\(1\le n\le 50,\space 1\le k\le 1000\)

Min-Max 容斥,轉為求 \(t\) 個鴿子中把任意一個鴿子餵飽的期望秒數。

考慮 Gachapon 一題的方法,把餵食序列中這 \(t\) 個鴿子拎出來,是一個子序列。對於子序列的每個字首,期望存在時間都是 \(\dfrac nt\),所以只需要求所有可能的字首出現機率之和。

一個長度為 \(d\) 的字首,合法的方案數為 \(1...t\) 的多重集排列數,其中每個數出現次數 \(\le k-1\)。總方案數為 \(k^d\),所以只需要求合法的長度為 \(d\) 的多重集排列數。

\(f[i,j]\) 表示前 \(i\) 個陣列成大小為 \(j\) 的排列數方案數。

但是直接轉移會超時,然後容斥也會超時。

考慮第 \(j\) 個數可以是 \(1...i\) 中任意一個,假設是 \(x\)。那麼如果 \(j-1\) 個數中 \(x\) 出現次數 \(<k-1\) 時這樣就合法;如果次數 \(=k-1\) 就不合法,考慮減去這個方案數,為 \({j-1 \choose k-1} f[i-1,j-k]\)

當然也可以生成函式推導,時間複雜度 \(O(n^2k)\)記錄


uoj422【集訓隊作業2018】小Z的禮物

link

題意:一個 \(n\times m\) 的網格,有一些關鍵格。每次隨機選擇一個合法位置放置一個 \(1\times 2\) 的骨牌,可以重疊,求把所有關鍵格都覆蓋的期望次數。

\(1\le n\le 6,\space 2\le m\le 100\)

Min-Max 容斥,轉為求對於所有關鍵格集合,覆蓋任意一個的期望次數。

用 dp 來綜合所有集合。設 \(f[i,j,k,S]\) 表示考慮到了格子 \((i,j)\),有 \(k\) 個骨牌放置位置可以覆蓋到選擇的關鍵格,上方輪廓線為 \(S\) 的帶符號方案數總和。

時間複雜度 \(O(n^2m^22^n)\)記錄

相關文章