我是靠谱客的博主 迷人鲜花,最近开发中收集的这篇文章主要介绍Tribles UVA - 11021(全概率推论),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题意:

  有k只麻球,每只只活一天,临死之前可能会出生一些新的麻球,

具体出生i个麻球的概率为P,给定m,求m天后麻球全部死亡的概率。

解析:

  从小到大,先考虑一只麻球的情况  设一只麻球m天后全部死亡的概率为f(m)

则第i天全部死亡的概率为f(i)  这一只麻球有多种情况,不生孩子,生一个,生两个,········

那么因为需要i天后全部死亡, 则孩子最多能繁衍到i天 即孩子最多繁衍(i-1)天  (因为孩子从第二天才出来 比父少一天)、

所以孩子i天后全部死亡的概率为f(i-1

所以 f(i)= P0 + P1*f(i-1) + P2*f(i-1)^2 + P3 * (i-1)^3+····+Pn-1*f(i-1)^n-1;

递推就好了

 

import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
import java.util.Vector;

public class Main {
    public static void main(String[] args) {
        final int maxn = 10010;
        Scanner cin = new Scanner(System.in);
        int T = cin.nextInt();
        int cnt = 0;
        while(T-- != 0)
        {
            double[] P = new double[maxn];
            double[] f = new double[maxn];
            int n = cin.nextInt();
            int k = cin.nextInt();
            int m = cin.nextInt();
            for(int i=0;i<n;i++)
                P[i] = cin.nextDouble();
            f[1] = P[0];
            for(int i=2;i<=m;i++)
                for(int j=0;j<n;j++)
                    f[i] += P[j] * Math.pow(f[i-1], j);
            f[m] = Math.pow(f[m], k);
            DecimalFormat s = new DecimalFormat("0.0000000");
            System.out.println("Case #" + ++cnt + ":" + s.format(f[m]));
    
        }
        
    }
}

 

转载于:https://www.cnblogs.com/WTSRUVF/p/9350971.html

最后

以上就是迷人鲜花为你收集整理的Tribles UVA - 11021(全概率推论)的全部内容,希望文章能够帮你解决Tribles UVA - 11021(全概率推论)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部