HNOI2015 亞瑟王 期望DP

2022-02-27 07:24:48 字數 1780 閱讀 1091

也許更好的閱讀體驗

\(\mathcal\)

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

輸入方式

t組資料

接下來組資料

每組資料第一行\(n,r\)

接下來\(n\)行\(p_i,d_i\)表示該技能發動概率以及傷害

\(1 <= t <= 444, 1 <= n <= 220, 0 <= r <= 132, 0 < p_i < 1, 0 <= d_i <= 1000\)

輸出格式

每組資料輸出一行期望傷害,建議保留\(10\)位小數

\(\mathcal\)

因為有乙個順序檢視的限制,沒有後效性的狀態是十分不好設的,因為不知道前面有幾個技能發動了,若乙個技能前面的技能在某輪發動了,則該技能本輪一定不能發動,若前面有些技能發動過,則它們都會被跳過

為了解決這種情況,我們設狀態時試著強制限制技能發動(\(nr\)列舉情況),當然,設的狀態仍然要滿足所有情況都考慮在內

設\(f[i][j]\)表示對前\(i\)個技能進行了\(j\)輪遊戲造成的概率

若有前\(i\)個技能進行了\(j\)

則有\(j\)輪不會考慮第\(i+1\)個技能

即有\(r-j\)輪遊戲選擇了\(i\)之後的技能

此時考慮第\(i+1\)個技能的情況,分為兩種

有\(p[i+1]^\)的概率\(i+1\)號技能從未發動

有\(1-p[i+1]^\)的概率\(i+1\)號技能發動過

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

所以有\(f[i+1][j]+=1-p[i+1]^f[i][j]\)

\(f[i+1][j+1]+=(1-p[i+1]^)f[i][j]\)

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

初值\(f[0][0]=1\),答案在中途計算

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

\(\mathcal\)

/*******************************

author:morning_glory

lang:c++

created time:2023年07月22日 星期一 14時17分22秒

*******************************/

#include #include #include #include using namespace std;

const int maxn = 255;

int t,n,r;

double ans;

double p[maxn],d[maxn];

double f[maxn][maxn];

int main()

}} printf("%.10lf\n",ans);

} return 0;

}

本篇部落格亦被收進期望總結

如有**講得不是很明白或是有錯誤,歡迎指正

如您喜歡的話不妨點個贊收藏一下吧

HNOI2015 期望dp 亞瑟王

描述 小 k 不慎被 ll 邪教 了,程度深到他甚至想要從亞瑟王邪教中脫坑。他決定,在脫坑之前,最後再來打一盤亞瑟王。既然是最後一戰,就一定要打得漂 亮。眾所周知,亞瑟王是乙個看臉的遊戲,技能的發動都是看概率的。作為乙個非 洲人,同時作為乙個前 oier,小 k 自然是希望最大化造成傷害的期望值。但...

HNOI2015 亞瑟王(概率dp)

題面太長了就不複製了,傳送門 一道做了還是很懵逼的題目,感覺以後碰到類似的還是不會,果然hnoi題目很皮。題解傳送 補充一下吧。感覺他的部落格已經寫得很好了.orz 需要的可以兩邊一起看 1.期望的線性性質 e x y e x e y x,y 是兩個不同的事件 e kx ke x k為常數 2.單獨...

bzoj4008 亞瑟王 概率dp

重述題意 卡牌有發動概率和傷害,每張卡牌只發動一次,按順序遍歷,給出輪數,求傷害期望。神思路啊 我的腦子基本想不出來 如果說正面剛,剛一天也剛不掉,我們換個思路,用f i j 表示第i張卡被遍歷j次的概率。這個概率可以分為兩部分 1 第i 1張卡被遍歷j次且一直沒發動。這一段公式為f i 1 j 1...