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
  • 相关阅读:
    文字上下滚动效果
    导航点击变化
    腾讯新闻导航栏
    Docker 数据卷和DockerFile
    Docker 容器
    Docker 镜像
    Docker的初始和架构
    面向对象的设计模式与原则
    安装CentOS 7MInimal版本
    ASP.NET WebApi 启动默认的HelpPage文档注释
  • 原文地址:https://www.cnblogs.com/A-LEAF/p/7239849.html
Copyright © 2011-2022 走看看