zoukankan      html  css  js  c++  java
  • Uva_11021 Tribles

    题目链接

    题意:

      现在有k只麻球, 每只麻球只能存活一天, 第二天就会死去, 死去之前可能生下x只小麻球(x = 0,1,2,...,n  1), 概率分别为P[0], P[1], ... , P[n - 1]。

      现求, m天之后, 所有麻球全死去的概率, 包括m天之前就已经全部死去。

    思路:

      每只麻球都是相互独立的, 那么 可以先算初始只有一只麻球,m天之内全部死去的概率。

      设f(x) 为 初始只有一只麻球, x天后全部死去的概率。

      得:

        f(x) = P[0] * f(x - 1)^0 + P[1] * f(x - 1) + P[2] * f(x-1)^2 + .. + P[n - 1] * f(x - 1)^(n - 1)。

      P[j]为一只麻球生下j只小麻球的概率, 又因为所有的麻球都要在x天之内全部死去, 所以 这j只小麻球需要在x - 1天全部死去, 而每只麻球相互独立, 所以概率相乘。

      得:

        初始条件:f[0] = P[0]。

      递推得到f[m], 答案即为f[m] ^ k。

    代码如下:

     1 #include <cmath>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <ctime>
     6 #include <set>
     7 #include <map>
     8 #include <list>
     9 #include <queue>
    10 #include <string>
    11 #include <vector>
    12 #include <fstream>
    13 #include <iterator>
    14 #include <iostream>
    15 #include <algorithm>
    16 using namespace std;
    17 #define LL long long
    18 #define MAXN 1010
    19 #define MOD 1000000007
    20 #define eps 1e-6
    21 int n, k, m;
    22 double P[MAXN];
    23 double f[MAXN];
    24 double qpow(double x, int k)
    25 {
    26     double res = 1.0;
    27     while(k)
    28     {
    29         if(k & 1) res = res * x;
    30         x = x * x;
    31         k >>= 1;
    32     }
    33     return res;
    34 }
    35 void init()
    36 {
    37     memset(f, 0, sizeof(f));
    38     f[0] = 0;
    39     f[1] = P[0];
    40     for(int x = 2; x <= m; x ++)
    41         for(int j = 0; j < n; j ++)
    42             f[x] = f[x] + P[j] * qpow(f[x - 1], j);
    43 }
    44 
    45 int main()
    46 {
    47     int T;
    48     int kcase = 0;
    49     scanf("%d", &T);
    50     while(T --)
    51     {
    52         scanf("%d %d %d", &n, &k, &m);
    53         for(int i = 0; i < n; i ++)
    54             scanf("%lf", &P[i]);
    55         init();
    56         printf("Case #%d: %.7lf
    ", ++ kcase, qpow(f[m], k));
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    Vue实例
    Vue介绍
    Vue相关知识点记录
    JS面向对象设计-创建对象
    JS面向对象设计-理解对象
    软件工程基础 完结撒花
    深度学习 基于CNN的纹理合成实践【附python实现】
    图像处理 傅里叶正逆变换与余弦正逆变换 【附C++实现】
    Webviz
    Webviz
  • 原文地址:https://www.cnblogs.com/By-ruoyu/p/4682241.html
Copyright © 2011-2022 走看看