zoukankan      html  css  js  c++  java
  • cogs 1487. 麻球繁衍(概率dp)

    这里写图片描述
    这里写图片描述

    分析:
    概率dp.first

    由于每只麻球,在出生之后就可以独立生活了,
    所以我们可以只计算出一开始只有一个麻球,m天后全部死亡的概率
    全概率公式得:

    假设A1,A2,A3,…..An为一个完备事件组,
    B是一个事件
    已知P(Ai)和P(B|Ai),i=1,2,3,…..,n
    则P(B)=P(B*A1)+P(B*A2)+……+P(B*An)=
    P(A1)*P(B|A1)+P(A2)*P(B|A2)+…….+P(An)*P(B|An)
    用求和符号写出就是:P(B)=∑P(Ai)P(B|Ai)
    此公式为全概公式

    这里写图片描述

    我们可以得到这样一个柿子
    这里写图片描述
    Pi就是产生i个麻球的概率
    f(i-1)表示一个麻球在i-1天之前连同ta的后代全部死掉的概率
    因为每个麻球是独立繁衍的
    所以产生了j个,全部死亡的概率就是f(i-1)^j

    同理,由于一开始有k只麻球,且各只麻球的生存是独立的,
    由乘法原理可以得到最后答案是
    f(m)^k

    这里写代码片
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    
    using namespace std;
    
    const int N=10005;
    double f[N],p[N];
    int n,m,t,k;
    
    double KSM(double x,int b)
    {
        double ans=1;
        for (int i=1;i<=b;i++)
            ans*=x;
        return ans;
    }
    
    int main()
    {
        //freopen("tribbles.in","r",stdin);
        //freopen("tribbles.out","w",stdout);
        scanf("%d",&t);
        for (int T=1;T<=t;T++)
        {
            scanf("%d%d%d",&n,&k,&m);
            for (int i=0;i<n;i++)
                scanf("%lf",&p[i]);
            f[0]=0;
            f[1]=p[0];
            for (int i=2;i<=m;i++)
            {
                f[i]=0;
                for (int j=0;j<n;j++)
                    f[i]+=p[j]*KSM(f[i-1],j);
            }
            printf("Case #%d: %.7lf
    ",T,KSM(f[m],k));
        }
        return 0;
    }
  • 相关阅读:
    javaScript真值和假值以及相等操作符
    javaScript操作符
    javascript变量作用域
    javaScript变量
    Linux命令学习之路——档案拷贝:cp
    Linux命令学习之路——变更文档拥有者:chown
    Linux命令学习之路——文档权限管理:chmod
    Linux命令学习之路——变更工作目录:cd
    关于Scrum团队的理解
    关于MATHAPP的测试
  • 原文地址:https://www.cnblogs.com/wutongtong3117/p/7673135.html
Copyright © 2011-2022 走看看