zoukankan      html  css  js  c++  java
  • cogs 1487. 麻球繁衍

    你有一坨K个毛球。这种毛球只会存活一天。在死亡之前,一个毛球有P_i的概率生出i个毛球(i=0,1,...,n-1)。m天后所有毛球都死亡的概率是多少?(包含在第m天前全部死亡的情况)

    题解:

    由于k只毛球之间的繁殖互不影响,所以只要求出一只毛球在第m天全死的概率即可

    设f[i]为一只毛球在第i天毛球全死的概率,

     f[0]=p[0]    f[i]=∑f[i-1]^j*p[j]  (感性理解:f[i]为在第i天死光的概率,枚举生了j个儿子)

                                                (                 f[i-1]^j才表示在第i-1天毛球全都死光         )

    f[1]=p0

    f[2]=p0 (f[1]) +∑(p0^i*pi)

    f[3]=p0+∑(p0^i*pi) (f[2]) +∑∑(p0^(i+j)*pi*pj)

    .........

    好像看不出规律

    那就感性理解

    f[i]=(f[i-1]-p0+1)*∑(p0^i)∑(pi)+p0

    最后ans=p[m]^k

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #define mem(a,b) memset(a,b,sizeof(a))
     5 #define dd double
     6 using namespace std;
     7 
     8 int T;
     9 int n,k,m;
    10 dd p[1001];
    11 dd f[1001];
    12 
    13 dd mi(dd a,int b)
    14 {
    15     dd ans=1.0;
    16     while(b)
    17     {
    18         if(b&1)
    19             ans=ans*a;
    20         a=a*a;
    21         b>>=1;
    22     }
    23     return ans;
    24 }
    25 
    26 int main(){
    27     cin>>T;
    28     for(int l=1;l<=T;++l)
    29     {
    30         cin>>n>>k>>m;
    31         for(int i=0;i<n;++i) scanf("%lf",&p[i]);
    32         mem(f,0);
    33         f[1]=p[0];
    34         for(int i=2;i<=m;++i)
    35           for(int j=0;j<n;++j)
    36                 f[i]+=p[j]*mi(f[i-1],j);
    37         printf("Case #%d: %.7lf
    ",l,mi(f[m],k));
    38     }
    39     return 0;
    40 }
    code
  • 相关阅读:
    ES6的Iterator,jquery Fn
    html4,xhtml,html5发展历史
    浏览器Range,Selection等选中文本对象
    高效的插入子节点DocumentFragment
    Vue 性能优化track-by
    JS中先有Object还是先有Function?
    Unicode 与(UTF-8,UTF-16,UTF-32,UCS-2)
    FormData、Blob、File、ArrayBuffer数据类型
    jQuery 2.0.3 源码分析 事件绑定
    记录:springmvc + mybatis + maven 搭建配置流程
  • 原文地址:https://www.cnblogs.com/A-LEAF/p/7239849.html
Copyright © 2011-2022 走看看