2021牛客暑期多校训练营4 B - Sample Game 期望dp\生成函数
傳送門
文章目錄
- 題意:
- 思路:
題意:
給你一個生成器,每次生成1?n1-n1?n其中的某個數的概率為pip_ipi?,生成的規則如下:
(1)(1)(1)隨機生成一個數加入集合。
(2)(2)(2)判斷生成的數是否是集合中的最大值,如果是返回第一步,否則進行下一步。
(3)(3)(3)如果集合中有xxx個數,那么將會得到x2x^2x2的分數。
現在讓你求期望得到多少分。
n≤100n\le100n≤100
思路:
題解是生成函數的做法,需要推公式,之后可能會補上,要是忙的話就🕊了,這里介紹期望dpdpdp的做法。
眾嗦粥汁,期望dpdpdp大部分是需要倒著來的,倒著來比較好考慮,所以難點就在設計狀態上了。我感覺期望dpdpdp能清楚的設計出狀態的含義就成功一大半了,而不是對于狀態的含義模糊不清,這樣是很難設計初始狀態以及計算答案的。
考慮到生成的數是有可能無限的,且貢獻是x2x^2x2,這個x2x^2x2不能直接維護,考慮轉換。
E((x+1)2)=E(x2+2?x+1)=E(x2)+2?E(x)+1E((x+1)^2)=E(x^2+2*x+1)=E(x^2)+2*E(x)+1E((x+1)2)=E(x2+2?x+1)=E(x2)+2?E(x)+1
所以我們設計狀態dp[i]dp[i]dp[i]表示最大值為iii的時候,還能生成數的期望個數,f[i]f[i]f[i]表示最大值為iii的時候,還能生成數的期望個數的平方。
既然含義有了,那么轉移方式就是 概率×(貢獻+下一個狀態的期望),轉移方程即:dp[i]=∑j=inpj?(dp[j]+1)+∑j=1i?1pjdp[i]=\sum _{j=i}^np_j*(dp[j]+1)+\sum_{j=1}^{i-1}p_jdp[i]=j=i∑n?pj??(dp[j]+1)+j=1∑i?1?pj?f[i]=∑j=inpj?(f[j]+2?dp[j]+1)+∑j=1i?1pjf[i]=\sum _{j=i}^np_j*(f[j]+2*dp[j]+1)+\sum _{j=1}^{i-1}p_jf[i]=j=i∑n?pj??(f[j]+2?dp[j]+1)+j=1∑i?1?pj?
說一下我對這個方程的理解吧,每個方程的前一半就是從后面的某個合法狀態轉移過來,注意需要加上相應的貢獻。后半部分就是從結束的狀態轉移過來,由于只能執行一步,所以貢獻是111和121^212。
還有這兩個方程不難發現,左右都有dp[i],f[i]dp[i],f[i]dp[i],f[i],我們移一下項即可。
維護前綴和和后綴和可以做到O(nlogn)O(nlogn)O(nlogn),但貌似沒必要?
總結
以上是生活随笔為你收集整理的2021牛客暑期多校训练营4 B - Sample Game 期望dp\生成函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021牛客暑期多校训练营4 E - T
- 下一篇: P4173 残缺的字符串 FFT匹配含有