題目
傳送門 to CF
傳送門 to VJ
思路
請參見大佬的博客,大概講的就是:
插敘一個小常識:薛定諤的撲克牌。桌面上的撲克牌在被觀測的一瞬間才被確定,所以某一次觀察只看第一張牌,看到 Joker 的概率自然是 m1 。
k 次方是難以計算的。我們不如把 n 次查看的結果記錄爲 a1,a2,a3,…,an ,是 Joker 則爲 1 ,否則爲零。現在我們要計算的是 (i=1∑nai)k
把它看成 k 個多項式相乘,這個式子等價於 x1,x2,x3,…,xk∈[1,n]∑ax1ax2ax3⋯axk
注意 x1,x2,x3,…,xk 不一定是互不相同的。
然後我們就可以直接進行動態規劃了。用 f(k0,n0) 表示,目前已經有 k0 個 a 乘起來,但是不同的 x 只有 n0 個。形式化地,我們有 f(k0,n0)=x1,x2,x3,…,xk0∈[1,n]∑card{x1,x2,x3,…,xk0}=n0ax1ax2ax3⋯axk0
規範一些,兩個條件應該都在 Σ 下方,但是我不會換行。card 表示集合內元素數量。這裏的集合當然是不可重集合。
如何進行 dp 轉移呢?只需要考慮添加 xk0 能否導致 card 增大。求和額外乘上使 axk0=1 的 xk0 的個數就是了。
用數學語言也可以表達。爲了方便寫,我把 x1 作爲決策對象,而不是上文中的 xk0 。
f(k0,n0)=x1,x2,x3,…,xk0∈[1,n]∑card{x1,x2,x3,…,xk0}=n0ax1ax2ax3⋯axk0=x2,x3,x4,…,xk0∈[1,n]∑card{x2,x3,x4,…,xk0}=n0ax2ax3ax4⋯axk0x1∈[1,n]∑x1∈{x2,x3,x4,…,xk0}ax1+x2,x3,x4,…,xk0∈[1,n]∑card{x2,x3,x4,…,xk0}=n0−1ax2ax3ax4⋯axk0x1∈[1,n]∑x1∈{x2,x3,x4,…,xk0}ax1
寫成方程式的形式就是 f(k0,n0)=n0⋅f(k0−1,n0)+[n−(n0−1)]⋅f(k0−1,n0−1)
然後算期望怎麼辦?我們得乘上概率。概率是多少啊?——注意到 ax1,ax2,ax3,…,axk 都會被欽定成 1 ,而剩下的 a 是無限制的。所以這個概率爲 m−k 。然後求和即可,ans=x=1∑km−x⋅f(k,x)
時間複雜度 O(k2) ,完美的通過了本題。我好菜啊
代碼
邊界條件是 f(0,0)=1 ,其餘爲零。表示一個 a 也沒有乘,類似於 ∏i=10⋯ 的玩意兒。集合當然是 Ø ,大小爲零。
具體代碼肯定不需要我來實現了,因爲我是菜逼。