LOJ2325「清華集訓 2017」小Y和恐怖的奴隸主(期望概率+矩陣快速冪)
阿新 • • 發佈:2019-01-11
LOJ2325「清華集訓 2017」小Y和恐怖的奴隸主
題意:
"A fight? Count me in!" 要打架了,算我一個。
"Everyone, get in here!" 所有人,都過來!
小Y是一個喜歡玩遊戲的OIer。一天,她正在玩一款遊戲,要打一個Boss。
雖然這個Boss有點生命值,但它只帶了一個隨從——一個只有 點生命值的“恐怖的奴隸主”。
這個“恐怖的奴隸主”有一個特殊的技能:每當它被扣減生命值但沒有死亡(死亡即生命值 ),且Boss的隨從數量小於上限 ,便會召喚一個新的具有 點生命值的“恐怖的奴隸主”。
現在小Y可以進行 次攻擊,每次攻擊時,會從Boss以及Boss的所有隨從中的等概率隨機選擇一個,並扣減 點生命值,她想知道進行 次攻擊後扣減Boss的生命值點數的期望。為了避免精度誤差,你的答案需要對取模。
資料範圍
題解:
最樸素的DP,利用概率算期望,記錄第i輪,分別有j,k,l個血量為1,2,3的奴隸主的概率。
,
每個狀態都有攻擊boss,有的貢獻。
n太大了,考慮矩陣快速冪。
如何把後面三維壓成一維呢?
發現所有合法狀態最多個,
可以直接把所有狀態之間的轉移關係列出來,然後跑矩陣快速冪。
但是,複雜度為,要T。
複雜度的瓶頸在於T組資料,每次矩陣*矩陣都是,
但其實我們只需要答案那個的陣列。
那麼,預處理出2的冪次方的矩陣,由於矩陣乘法的結合率,
一項一項,每次都是Ans向量乘矩陣,複雜度
學習:
- 對於和的期望不好求,可以算每個狀態的概率*它的貢獻。(不過逆推可以較容易地求得和的期望)
- 表示清晰的多維DP陣列難以矩陣快速冪,但是可以看看所有狀態有多少,把狀態間的關係列出來,就可以轉移。
- 對於在貢獻在中間統計的情況,例如這個的處理,矩陣多開一位當計數器即可,既繼承上一個,又加上新增的。
- 當然這道題可以逆推,即