51nod 1670 打怪兽

題意

勇士一開始戰鬥力是 0。面對著 n 個怪,每個怪亦有自己的戰鬥力。勇士戰鬥力不低於怪戰鬥力的時候,勇士勝,怪死亡,勇士戰鬥力加一;否則勇士死,戰鬥結束。

目前不清楚怪的出現順序,問對於所有怪的出場順序,勇士戰鬥結束的時候戰鬥力的數學期望是多少?

由於這個數字是小數,精度難以保證。請將這個期望乘以 n! ,之後再取模 109+7 輸出。

鏈接:http://www.51nod.com/onlineJudge/questionCode.html#problemId=1670&noticeId=35437

思路

所謂結束意味著敗于前面 n 個怪的某一個,或者是戰勝所有的怪。這些情況下的戰鬥力是已知的,所以我們的任務是求出每種結局的概率。

如果直接求方案數難以下手。但是我們發現如果知道打贏第 i 只怪的概率是 fi 的話。就容易求出死於第 i 只怪的概率是(fi1fi)。

我們發現,打贏第 i 只怪之後,再在沒打死的怪中選一隻可以打死的怪就意味著打死了第 i+1 只怪。如果用 x 表示打死 i 之後可以打死的怪的數目。那麼沒打的、能打死的怪的數目就是 xii ,沒打的怪總數是 ni 。那麼就有 fi+1=fi(xii)ni

至於 x 的求法,只要看小於等於某個戰鬥力的怪有多少就可以了,利用前綴和就不難解決。

最後要求乘以 n!,那麼就變成了 f0=n! (原本 f0=1 )。公式形式都是不變的。

結果就是 i=1n(fi1fi)(i1)+nfn

代碼:https://code.csdn.net/snippets/1585064/master/51nod1670.cpp/raw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值