解题报告链接:
http://www.cnblogs.com/183zyz/archive/2012/09/13/2683524.html
做法:设当有i个吸血鬼时变成n个吸血鬼的天数的数学期望为dp[i].
pi为人和吸血鬼相遇的概率,pi = i*(n-i)/cn2 . cn2表示从n个人中选两个人出来的选法,那么人和吸血鬼相遇的选法为i*(n-i).p为人变吸血鬼的概率。
则有dp[i] = p*pi*(dp[i+1]+1)+(1-p*pi)(dp[i+1]+1)
化为:dp[i] = dp[i+1] + 1/(p*pi)
有dp[n] = 0;
很容易得到dp[1] = sum(1/(p*pi)) (1=<i<=n-1).
贴代码:
1 #include<cstdio> 2 int main() 3 { 4 // freopen("in.c","r",stdin); 5 int t; 6 scanf("%d",&t); 7 while(t--) 8 { 9 int n; 10 double p; 11 scanf("%d%lf",&n,&p); 12 double s = (double)n*(n-1)/2; 13 double ans =0; 14 for(int i=n-1; i>=1; --i) 15 { 16 double pi=(double)i*(n-i)/s; 17 ans += 1.0/(p*pi); 18 } 19 printf("%.3f ",ans); 20 } 21 return 0; 22 }