[CF1278F]Cards

題目

傳送門 to CF

傳送門 to VJ

思路

請參見大佬的博客,大概講的就是:

插敘一個小常識:薛定諤的撲克牌。桌面上的撲克牌在被觀測的一瞬間才被確定,所以某一次觀察只看第一張牌,看到 JokerJoker 的概率自然是 1m\frac{1}{m}

kk 次方是難以計算的。我們不如把 nn 次查看的結果記錄爲 a1,a2,a3,,ana_1,a_2,a_3,\dots,a_n ,是 JokerJoker 則爲 11 ,否則爲零。現在我們要計算的是 (i=1nai)k\left(\sum_{i=1}^{n}a_i\right)^k

把它看成 kk 個多項式相乘,這個式子等價於 x1,x2,x3,,xk[1,n]ax1ax2ax3axk\sum_{x_1,x_2,x_3,\dots,x_k \in[1,n]}a_{x_1}a_{x_2}a_{x_3}\cdots a_{x_k}

注意 x1,x2,x3,,xkx_1,x_2,x_3,\dots,x_k 不一定是互不相同的。

然後我們就可以直接進行動態規劃了。用 f(k0,n0)f(k_0,n_0) 表示,目前已經有 k0k_0aa 乘起來,但是不同的 xx 只有 n0n_0 個。形式化地,我們有 f(k0,n0)=x1,x2,x3,,xk0[1,n]card{x1,x2,x3,,xk0}=n0ax1ax2ax3axk0f(k_0,n_0)=\sum_{x_1,x_2,x_3,\dots,x_{k_0}\in[1,n]}^{card\{x_1,x_2,x_3,\dots,x_{k_0}\}=n_0}a_{x_1}a_{x_2}a_{x_3}\cdots a_{x_{k_0}}

規範一些,兩個條件應該都在 Σ\Sigma 下方,但是我不會換行。cardcard 表示集合內元素數量。這裏的集合當然是不可重集合。

如何進行 dpdp 轉移呢?只需要考慮添加 xk0x_{k_0} 能否導致 cardcard 增大。求和額外乘上使 axk0=1a_{x_{k_0}}=1xk0x_{k_0} 的個數就是了。

用數學語言也可以表達。爲了方便寫,我把 x1x_1 作爲決策對象,而不是上文中的 xk0x_{k_0}

f(k0,n0)=x1,x2,x3,,xk0[1,n]card{x1,x2,x3,,xk0}=n0ax1ax2ax3axk0=x2,x3,x4,,xk0[1,n]card{x2,x3,x4,,xk0}=n0ax2ax3ax4axk0x1[1,n]x1{x2,x3,x4,,xk0}ax1+x2,x3,x4,,xk0[1,n]card{x2,x3,x4,,xk0}=n01ax2ax3ax4axk0x1[1,n]x1∉{x2,x3,x4,,xk0}ax1\begin{aligned} f(k_0,n_0)&=\sum_{x_1,x_2,x_3,\dots,x_{k_0}\in[1,n]}^{card\{x_1,x_2,x_3,\dots,x_{k_0}\}=n_0}a_{x_1}a_{x_2}a_{x_3}\cdots a_{x_{k_0}}\\ &=\sum_{x_2,x_3,x_4,\dots,x_{k_0}\in[1,n]}^{card\{x_2,x_3,x_4,\dots,x_{k_0}\}=n_0}a_{x_2}a_{x_3}a_{x_4}\cdots a_{x_{k_0}}\sum_{x_1\in[1,n]}^{x_1\in\{x_2,x_3,x_4,\dots,x_{k_0}\}}a_{x_1}\\ &+\sum_{x_2,x_3,x_4,\dots,x_{k_0}\in[1,n]}^{card\{x_2,x_3,x_4,\dots,x_{k_0}\}=n_0-1}a_{x_2}a_{x_3}a_{x_4}\cdots a_{x_{k_0}}\sum_{x_1\in[1,n]}^{x_1\not\in\{x_2,x_3,x_4,\dots,x_{k_0}\}}a_{x_1} \end{aligned}

寫成方程式的形式就是 f(k0,n0)=n0f(k01,n0)+[n(n01)]f(k01,n01)f(k_0,n_0)=n_0\cdot f(k_0-1,n_0)+[n-(n_0-1)]\cdot f(k_0-1,n_0-1)

然後算期望怎麼辦?我們得乘上概率。概率是多少啊?——注意到 ax1,ax2,ax3,,axka_{x_1},a_{x_2},a_{x_3},\dots,a_{x_k} 都會被欽定成 11 ,而剩下的 aa 是無限制的。所以這個概率爲 mkm^{-k} 。然後求和即可,ans=x=1kmxf(k,x)ans=\sum_{x=1}^{k}m^{-x}\cdot f(k,x)

時間複雜度 O(k2)\mathcal O(k^2) ,完美的通過了本題。我好菜啊

代碼

邊界條件是 f(0,0)=1f(0,0)=1 ,其餘爲零。表示一個 aa 也沒有乘,類似於 i=10\prod_{i=1}^{0}\cdots 的玩意兒。集合當然是 Ø\text{\O} ,大小爲零。

具體代碼肯定不需要我來實現了,因爲我是菜逼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章