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\n",ans);
20     }
21     return 0;
22 }
View Code

 

转载于:https://www.cnblogs.com/allh123/p/3264780.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值