ZOJ 3551 吸血鬼 概率DP

解题报告链接:

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 }
View Code
原文地址:https://www.cnblogs.com/allh123/p/3264780.html