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
  • 相关阅读:
    [CF724G]Xor-matic Number of the Graph
    [SOJ #537]不包含 [CF102129I]Incomparable Pairs(2019-8-6考试)
    [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)
    [洛谷P4052][JSOI2007]文本生成器
    [洛谷P3966][TJOI2013]单词
    [洛谷P5158]【模板】多项式快速插值
    [洛谷P3227][HNOI2013]切糕
    【bzoj】3477: [Usaco2014 Mar]Sabotage 01分数规划
    【SPOJ
    【以前的空间】系列
  • 原文地址:https://www.cnblogs.com/A-LEAF/p/7239849.html
Copyright © 2011-2022 走看看