期望DP


也許更好的閱讀體驗

數學期望

符號

\(E=p*v\) 其中\(E\)為期望,\(v\)為權值,\(p\)為概率

含義

期望表示多個可能事件的合理分配情況 (本人自己的理解,不喜勿噴)
漢語期望意思是指人們對某樣東西的提前勾畫出的一種標准,達到了這個標准就是達到了期望值(百度百科)
數學期望也可認為是進行某件事能得到的平均結果,或者理想代價
期望值也許和每個得到值都 不相等
舉個例子
你去買彩票,每張彩票\(10\)元,中了獎可以得\(10000\)元,有\(30\%\)的概率中獎
我們來算一下買一張彩票的期望利潤
首先有\(30\%\)的概率中獎,根據定義期望得到\(30\%*10000\)
又有\(70\%\)的概率不中獎,那么我們期望得到\(70\%*0\)
我們每次買一張彩票\(100%\)會花掉\(10\)
所以有\(E=30\%*10000+70\%*0-10=290\)
我們可認為每買一張彩票賺了\(290\)
但是實際上無論怎樣,一張彩票都不會賺\(290\)元的。


轉移方程

幾種常見設轉移方程數組的方法

  1. \(f[i]\)表示的是由\(i\)狀態變成 最終 狀態的期望
  2. 按照題意直接設
  3. 把選擇的東西加入數組,如\(f[i][j]\)表示第\(i\)個物品選\(j\)個的期望或\(f[i][j]\)表示有\(i\)\(A\)物品,\(j\)\(B\)物品的期望

求轉移方程
應優先考慮進行操作后當前狀態會怎么樣,而不是如何變成當前狀態,即先考慮 逆向
如果逆向沒有思路,則考慮 正向


經典例題

注:沒有貼出代碼,有些題目現在找不到了 (至少博主沒有找到),也有博主自己想的題目 (很水),如博主有寫代碼則已放進標題的鏈接里,那些鏈接都是題解,不是原題鏈接

SP1026FavoriteDice

題目大意

一個\(n\)面的骰子,求期望擲幾次能使得每一面都被擲到

解決方法

\(f[i]\)表示已經擲到過\(i\)面, 期望擲多少次骰子使每一面都被擲到
現在擲一次骰子,有兩種情況

  1. \(\frac{i}{n}\)的概率擲到已經擲到過的面,此時仍然還要擲\(f[i]\)次骰子
  2. \(\frac{n-i}{n}\)的概率擲到沒擲到過的面,此后就擲到過\(i+1\)個面了,還需擲\(f[i+1]\)次骰子

需要注意的是,無論是擲到以上哪種情況,都需要擲一次骰子
所以有
\(f[i]=\frac{i}{n}f[i]+\frac{n-i}{n}f[i+1]+1\)
將其化簡
\(f[i]=f[i+1]+\frac{n}{n-i}\)

初值\(f[n]=0\),答案為\(f[0]\)
應逆向循環


塗格子/小孩和禮物

題目大意

\(n\)個格子,每次等概率隨機給一個格子染色,問塗\(m\)次后期望有多少格子被染色了

解決方法

\(f[i]\)表示塗\(i\)次后期望有多少格子被染色了
現在進行第\(i\)次染色,仍然有兩種情況

  1. \(\frac{f[i-1]}{n}\)的概率塗到已經塗過的格子
  2. \(\frac{n-f[i-1]}{n}\)的概率塗到沒塗過的格子

需要注意的是,無論是以上哪種,都已經有\(f[i-1]\)個格子被染色了
所以有
\(f[i]=\frac{f[i-1]}{n}·0+\frac{n-f[i-1]}{n}·1+f[i-1]\)
將其化簡
\(f[i]=\frac{n-f[i-1]}{n}+f[i-1]=\frac{n-1}{n}f[i-1]+1\)
此時該式就是一個等差數列套等比數列
於是我們可以求其通項公式,博主懶得求了寫下大致過程

\(k=\frac{n-1}{n}\)
\(f_n=kf_{n-1}+1\)
\(f_n+\frac{1}{k-1}=kf_{n-1}+\frac{k}{k-1}\)
\(f_n+\frac{1}{k-1}=k(f_{n-1}+\frac{1}{k-1})\)
\(g_n=f_n+\frac{1}{k-1}\)
\(g_n=kg_{n-1}\)
怎么求\(g_n\)就不用說了吧
\(f_n=g_n-\frac{1}{k-1}\)
\(f_n\)也能求出來了

初值\(f[0]=0|f[1]=1\)答案為\(f[m]\)
應正向循環


簡單題

題目大意

桌面上有R張紅牌和B張黑牌,隨機打亂順序后放在桌面上,開始一張一張地翻牌,翻到紅牌得到1美元,黑牌則付出1美元。可以隨時停止翻牌,在最優策略下平均能得到多少錢。

解決方法

\(f[i][j]\)表示有\(i\)張紅牌,\(j\)張黑牌的期望收益
考慮翻一張牌,還是有兩種情況

  1. \(\frac{i}{i+j}\)的概率翻到紅牌,此后就只有\(i-1\)張紅牌,\(j\)張黑牌
  2. \(\frac{j}{i+j}\)的概率翻到黑牌,此后就只有\(i\)張紅牌,\(j-1\)張黑牌

需要注意的是,不要忘了翻開的牌的貢獻
翻開一張牌后,該顏色牌數目就少了一張

所以有
\(f[i][j]=\frac{i}{i+j}(f[i-1][j]+1)+\frac{j}{i+j}(f[i][j-1]-1)\)
由於是最優策略,所以咱是不可能賠錢的
\(f[i][j]=max(0,\frac{i}{i+j}(f[i-1][j]+1)+\frac{j}{i+j}(f[i][j-1]-1))\)

初值\(f[0][1]=0,f[i][0]=i\),答案為\(f[R][B]\)
應正向循環


亞瑟王

題目大意

給出\(n\)個技能,每個技能按輸入順序有\(p[i]\)的概率釋放並造成\(d[i]\)的傷害。每輪游戲從前往后順序查看每個技能,若技能發動過則跳過,沒發動過則以\(p[i]\)的技能發動,即每個技能只能發動一次,若將一個技能發動,則進行下一輪游戲,沒有成功發動或被跳過就查看下一個技能,一輪游戲可能每個技能都不發動,問\(r\)輪游戲一共能造成的傷害期望。

解決方法

因為有一個順序查看的限制,沒有后效性的狀態是十分不好設的,因為不知道前面有幾個技能發動了,若一個技能前面的技能在某輪發動了,則該技能本輪一定不能發動,若前面有些技能發動過,則它們都會被跳過
為了解決這種情況,我們設狀態時試着強制限制技能發動(\(nr\)枚舉情況),當然,設的狀態仍然要滿足 所有 情況都考慮在內
\(f[i][j]\)表示對前\(i\)個技能進行了\(j\)輪游戲發生的 概率
若前\(i\)個技能進行了\(j\)輪游戲
則有\(j\)輪不會考慮第\(i+1\)個技能
即有\(r-j\)輪游戲選擇了\(i\)之后的技能
此時考慮第\(i+1\)個技能的情況,分為兩種

  1. \(p[i+1]^{r-j}\)的概率\(i+1\)號技能從未發動
  2. \(1-p[i+1]^{r-j}\)的概率\(i+1\)號技能發動過

需要注意的是,此時 已經 確定前\(i\)個技能進行並 只進行\(j\)輪游戲,其概率應該也計算在內
所以有

  1. \(f[i+1][j]+=1-p[i+1]^{r-j}f[i][j]\)
  2. \(f[i+1][j+1]+=(1-p[i+1]^{r-j})f[i][j]\)

\(j+1\)要小於等於\(r\)

初值\(f[0][0]=1\),答案在中途計算
應正向循環

計算了概率,別忘了求的是期望傷害,在求概率的時候順便用概率乘以傷害


抽卡

題目大意

\(\mathcal{Morning\_Glory}\)最近迷上了抽卡,每次抽卡抽到\(6\)星卡的概率為\(p\)。抽卡活動進行\(n\)天,\(\mathcal{Morning\_Glory}\)非常喜歡抽卡,所以他不會錯過這個活動的每一天,即每天都一定會抽卡,在第\(i\)天必須要花\(c[i]\)游戲幣進行抽卡。求\(\mathcal{Morning\_Glory}\)在活動結束時抽得恰好\(k\)\(6\)星卡的期望游戲幣花費。

解決方法

\(f[i][j]\)表示在第\(i\)結束后抽到\(j\)\(6\)星卡的期望游戲幣花費
在第\(i\)天進行抽卡,有兩種情況

  1. \(p\)的概率抽到\(6\)星卡
  2. \(1-p\)的概率沒抽到\(6\)星卡

需要注意的是無論是否翻到,都要花費
所以有
\(f[i][j]=p·f[i-1][j-1]+(1-p)·f[i-1][j]+c[i]\)

初值\(f[0][0]=0\),答案為\(f[n][k]\)
應正向循環


收集郵票

POJ3682King Arthur's Birthday Celebration

這兩道題是一樣的類型,只需將概率與計算改一下即可,這里用收集郵票來做例題
題目大意

\(n\)種郵票,每天等概率的買一張郵票,第\(i\)天購買要花費\(i\)元,求收集\(n\)種郵票的期望花費

解決方法

先設\(f[i]\)表示買到\(i\)種郵票后,離買到\(n\)種郵票的期望還差天數
和最上面那題一樣的處理方法
考慮當前買了\(i\)張郵票,再買一張郵票,有兩種情況

  1. \(\frac{i}{n}\)的概率買到重復的郵票,此時仍只買到\(i\)張郵票
  2. \(\frac{n-i}{n}\)的概率買到沒買過的郵票,此后就已買到\(i+1\)張郵票

需要注意的是,無論哪種情況,都過了一天
所以有
\(f[i]=\frac{i}{n}f[i]+\frac{n-i}{n}f[i+1]+1\)
將其化簡
\(f[i]=f[i+1]+\frac{n}{n-i}\)

初值\(f[n]=0\),答案為\(f[0]\)
應逆向循環

當然這只是期望天數,不是期望花費
\(g[i]\)表示 擁有(不是買)\(i\)種郵票, 買到\(n\)種郵票的期望花費
考慮當前擁有了\(i\)張郵票,買一張郵票,有兩種情況

  1. \(\frac{i}{n}\)的概率買到重復的郵票,此時仍只擁有\(i\)
  2. \(\frac{n-i}{n}\)的概率買到沒買過的郵票,此后就已擁有\(i+1\)張郵票

需要注意的是,無論哪種情況,都買了一張郵票
此時我們不知道每張郵票多少錢
但我們知道每張郵票和過了多少天有關
這次的注意寫在前面,我們是認為有了\(i\)張郵票后才開始,所以第一天郵票價格為\(1\)
為什么這么設?
我們不知道也不好處理出前面買了多少張郵票,再買到一張郵票要多少錢
但是我們知道第一天肯定是只要\(1\)元的,答案為\(g[0]\),中間的過程不重要,只需推出最終答案
我們借助初始狀態的這條非常有用的性質於是就設出了這樣的\(g\)
這樣我們可以知道

  1. 若買到重復的郵票,我們知道,因為是設當前是第一天,所以原本希望買到的郵票的天數又往后推了一天,所以總價格要多\(f[i]\)元,還要加上自己的\(1\)
  2. 若買到沒買過的郵票,同理,因為后面的\(g[i+1]\)也是從第\(1\)天開始考慮的,所以原本希望買到的郵票數也往后推了一天,所以價格要多\(f[i+1]\)元,還要加上自己的\(1\)

所以有

  1. \(g[i]+=\frac{i}{n}(g[i]+f[i]+1)\)
  2. \(g[i]+=\frac{n-i}{n}(g[i+1]+f[i+1]+1)\)

總寫下來就是\(g[i]=\frac{i}{n}(g[i]+f[i]+1)+\frac{n-i}{n}(g[i+1]+f[i+1]+1)\)

將其化簡得到
\(g[i]=\frac{i}{n-i}f[i]+g[i+1]+f[i+1]+\frac{n}{n-i}\)

初值\(g[n]=0\),答案為\(g[0]\)
應逆向循環


如有哪里講得不是很明白或是有錯誤,歡迎指正
如您喜歡的話不妨點個贊收藏一下吧
如能得到推薦博主就更開心了
您的鼓勵是博主的動力


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM