【概率】COGS1487 麻球繁衍

一开始手推概率,结果发现结果一直对不上。后来发现是计算器没用好。。。

比较好思考的是 求k只麻球的概率  其实是求 一只麻球的概率^k的概率  (因为乘法原理,每个麻球的概率都是相对独立的所以乘起来)

我们设 1只麻球,m天后死亡的概率是 f(m)

那么根据全概率公式就有 $f(i)=P_0+f(i-1)\times P_1+f(i-1)^{2}\times P_2+f(i-1)^{3}\times P_3 +.....+f(i-1)^{n-1}\times P_n-1$

对于我这种萌新,我第一眼看过去内心是wc的,但是你手推一推会发现其实很好理解:

第一天死亡的只有P0

第二天死亡的会有 昨天产生0个的麻球今天死亡了 昨天产生1个的麻球今天死亡了  昨天产生的2个麻球今天死亡了 昨天产生的3个麻球今天死亡...

第二天死亡的会有 昨天产生0个的麻球今天死亡了 昨天产生1个的麻球今天死亡了  昨天产生的2个麻球今天死亡了 昨天产生的3个麻球今天死亡...

代码实现并不难,只不过需要一定的思考~

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
inline int Read(){
    int ans = 0,flag=1;
    char ch=getchar();
    while(ch<‘0‘ || ch>‘9‘){
        if(ch==‘-‘)flag=-1;
        ch=getchar();
    }
    while(ch>=‘0‘ && ch<=‘9‘){
        ans = ans * 10 + ch - ‘0‘;
        ch = getchar();
    }
    return flag*ans;
}

int T;
int n,k,m;
double P[1005],dp[1005];

double Pow(double num,int x){
    double ans = 1;
    while(x){
        if(x&1) ans*=num;
        num*=num;
        x>>=1;
    }
    return ans;
}

int main(){
    freopen("tribbles.in","r",stdin);
    freopen("tribbles.out","w",stdout);
    T = Read();
    for(register int i=1;i<=T;++i){
        n = Read();
        k = Read();
        m = Read();
        for(register int now=0;now<n;++now){
            scanf("%lf",&P[now]);
        }
        dp[0]=0;
        dp[1]=P[0];
        for(register int day = 2;day<=m;++day){
            dp[day] = 0;
            for(register int now = 0 ;now<n;++now)
            dp[day]+=P[now]*Pow(dp[day-1],now);
        }
        printf("Case #%d: %.7lf\n",i,Pow(dp[m],k));
    }
}

别学我写快速幂啊,直接用Pow不容易出错

时间: 2024-12-26 21:09:15

【概率】COGS1487 麻球繁衍的相关文章

UVA 11021 麻球繁衍

题意: 有K只麻球,每只生存一天就会死亡,每只麻球在死之前有可能生下一些麻球,生i个麻球的概率是pi,问m天后所有的麻球都死亡的概率是多少? 思路:      涉及到全概率公式,因为麻球的各种活动都互不影响,所以现在只考虑一直麻球,我们假设f[i]是第i天全部都死亡的概率,那么f[i] = p0 + p1*f[i-1] + p2*f[i-1]^2 + ...pn-1*f[i - 1]^(n-1),其中pjf(i-1)^j的含义是这个麻球生了j个后代,他们在i-1天后全部死亡,注意这j个后代的死亡

【概率】COGS 1487:麻球繁衍

Description 万有引力定律: “使物体相互靠近的力的大小与物体的质量成正比——而物体的质量又由同一种力决定.这是一个有趣并且有益的例子,说明了科学是如何用A证明B,再用B证明A的.”——安布罗斯·比尔斯(美国讽刺作家——译者注). 你有一坨K个毛球(<星际迷航>中的种族——译者注).这种毛球只会存活一天.在死亡之前,一个毛球有P_i的概率生出i个毛球(i=0,1,…,n-1).m天后所有毛球都死亡的概率是多少?(包含在第m天前全部死亡的情况) Input 输入包含多组数据. 输入文件

【乱入】Uva11021麻球繁衍

就是根据概率公式入门算算. #include<bits/stdc++.h> const int N=1010; int n,m,k; double p[N],f[N]; int main(){ int T;scanf("%d",&T); for(int yql=1;yql<=T;yql++){ scanf("%d%d%d",&n,&k,&m); for(int i=1;i<=n;i++)scanf("

【UVA】【11021】麻球繁衍

数序期望 刘汝佳老师的白书上的例题……参见白书 1 //UVA 11021 2 #include<cmath> 3 #include<cstdio> 4 #define rep(i,n) for(int i=0;i<n;++i) 5 #define F(i,j,n) for(int i=j;i<=n;++i) 6 const int N=1010; 7 int n,m,k; 8 double p[N],f[N]; 9 int main(){ 10 int t; 11 s

[概率]m个球扔到n个盒子

问题描述 有m个球,要扔到n个盒子里.其中每个球都是互相独立地扔.问最后平均有几个盒子是有球的? 问题解析 这类问题是较为纯粹的数学问题,当然也可以用计算机精确地求出答案. 方案一:编程解决 p(m, i):表示前 m 个球,扔到 n 个盒子里,共占用了 i 个盒子的概率 于是 p(m, i) = p(m-1, i) * (i/n) + p(m-1, i-1) * (n-i+1)/n p(m, i) = 0, if i <= 0 || i > m || i > n 于是可以就可以根据上述

noip专题复习之数学(5)——概率与数学期望

1.全概率公式: 将样本分成若干个不相交的部分B1,B2,...,Bn,则P(A)=P(A|B1)P(B1)+P(A|B2) P(B2)+...+P(A|Bn)*P(Bn).(P(A|B)是指在B事件发生的条件下,事件A发生的概率. 使用全概率公式的关键是"划分样本空间",只有把所有可能不重不漏地进行分类,并算出每个分类下事件发生的概率,才能得出该事件发生的总概率. 2.数学期望: 简单地说,随机变量X的数学期望EX就是所有可能值按照概率加权的和. 比如一个随机变量有1/2的概率为1,

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

Tribles UVA - 11021(全概率推论)

题意: 有k只麻球,每只只活一天,临死之前可能会出生一些新的麻球, 具体出生i个麻球的概率为P,给定m,求m天后麻球全部死亡的概率. 解析: 从小到大,先考虑一只麻球的情况  设一只麻球m天后全部死亡的概率为f(m) 则第i天全部死亡的概率为f(i)  这一只麻球有多种情况,不生孩子,生一个,生两个,········ 那么因为需要i天后全部死亡, 则孩子最多能繁衍到i天 即孩子最多繁衍(i-1)天  (因为孩子从第二天才出来 比父少一天). 所以孩子i天后全部死亡的概率为f(i-1) 所以 f(

UVA11021 Tribles[离散概率 DP]

UVA - 11021 Tribles GRAVITATION, n. “The tendency of all bodies to approach one another with a strength proportion to the quantity of matter they contain – the quantity of matter they contain being ascertained by the strength of their tendency to app