【Codeforces 499D】Name That Tune
阿新 • • 發佈:2019-03-04
ORC tun 結果 name span class clas 浮點 for 內進行優化
即可。
Codeforces 499 D
題意:給\(n\)個曲子,每個曲子每一秒有\(p_i\)的幾率可以被猜出來,過了\(t_i\)秒肯定能被猜出來,猜完第\(i\)首歌立即播第\(i+1\)首,問\(T\)秒內期望猜多少首。
思路:考慮\(dp\):\(dp(i,j)\)表示在第\(j\)個時間點正好猜出第\(i\)首歌的概率
轉移方程:\(dp(i,j)=dp(i-1,j-t_i)\times(1-p_i)^{t_i-1}+\sum_{x=1}^{t_i-1}dp(i-1,j-x)\times(1-p_i)^{x-1}\times p_i?\)
可以看出,這個肯定是要超時的,所以對\(\sum\)
原優化:記錄兩個變量\(sum\)和\(mul\)表示\(\sum\)內的式子結果是\(sum\times mul\times p_i\),然後在\(j+1\)後\(sum+dp(i-1,j-1)/mul-dp(i-1,j-t_i)/(mul/(1-p_i)^{t_i-1})\),\(mul\times (1-p_i)\)即可。
評:這個優化看起來很對,但是由於\(mul\)實在太小,浮點誤差導致變成了\(0\),所以不行。
優化:類似滾動哈希,記錄\(sum?\)表示\(\sum?\)內的式子結果是\(sum\times p_i?\),然後在\(j+1?\)後\(sum\times (1-p_i)+dp(i-1,j-1)-dp(i-1,j-t_i)\times (1-p_i)^{t_i-1}?\)
【Codeforces 499D】Name That Tune