• 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
  • 相关阅读:
    css3记事
    ele
    vue记事1
    HBuilder
    继承与面向对象设计
    实现
    设计与声明
    资源管理
    构造/析构/赋值运算
    让自己习惯C++
  • 原文地址:https://www.cnblogs.com/allh123/p/3264780.html
Copyright © 2020-2023  润新知