传送门:QAQ
题意:最开始有n-1个人和1个吸血鬼,每天会派两个生物见面(如果是人和吸血鬼见面则有p的概率将人感染成吸血鬼),问你所有人都变成吸血鬼的天数的数学期望。
思路:第一次写期望dp的题。(对于独立事件来说,期望是概率的倒数,-_-zz)
递推方程为dp[i]=(dp[i+1]+1)*p+(dp[i]+1)*(1-p).
dp[i]表示剩下i个人全部变成吸血鬼的天数期望。p就是简单的组合数。
因为每次变成吸血鬼都要花费一天,所以加一。然后就是代码中简化的递推式了(懒就没有写dp数组)。
代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
int main(void) {
int t;
scanf("%d", &t);
while (t--) {
double n;
double p;
scanf("%lf%lf", &n, &p);
double ans = 0;
double fix = 0;
for (int i = 1; i < n; i++) {
double gg = (n - i)*i*p * 2 / (n*(n - 1));
ans += 1 / gg;
}
printf("%.3lf\n", ans);
}
return 0;
}