zoukankan      html  css  js  c++  java
  • poj2096

    题意:
     一个软件有s个子系统,会产生n种bug  某人一天发现一个bug,这个bug属于一个子系统,属于一个分类 每个bug属于某个子系统的概率是1/s,属于某种分类的概率是1/n 问发现n种bug,每个子系统都发现bug的天数的期望。

    ——————————————————————————————————————————————————————

    f[i][j]:从找到i种j个系统的bug到找到n种s个系统的bug需要的天数。

    明显f[n][s]==0

    那么从f[i][j]找一天,找到一个bug,可能产生四中情况:

    1、还是i种j系统,概率(i*j)/(n*s)

    2、i+1种j系统,概率((n-i)*j)/(n*s)

    3、i种j+1系统,概率((s-j)*i)/(n*s)

    4、i+1种j+1系统,概率((n-i)*(s-j))/(n*s)

    所以逆推

    f[i][j]=(i*j)/(n*s)*f[i][j]+((n-i)*j)/(n*s)*f[i+1][j]+((s-j)*i)/(n*s)*f[i][j+1]+((n-i)*(s-j))/(n*s)*f[i+1][j+1]+1

    化简后得到:

    f[i][j]=((n-i)*j*f[i+1][j]+(s-j)*i*f[i][j+1]+(n-i)*(s-j)*f[i+1][j+1]+n*s)/(n*s-i*j)

    —————————————————————————————————————————————————————

     1 #include<cstdio>
     2 using namespace std;
     3 const int maxn=1010;
     4 int n,s;
     5 double f[maxn][maxn];
     6 
     7 int main()
     8 {
     9     scanf("%d%d",&n,&s);
    10 
    11     f[n][s]=0;
    12     for(int i=n;i>=0;--i)
    13         for(int j=s;j>=0;--j)
    14         {
    15             if(i==n&&j==s)continue;
    16             f[i][j]=((n-i)*j*f[i+1][j]+(s-j)*i*f[i][j+1]+(n-i)*(s-j)*f[i+1][j+1]+n*s)/(n*s-i*j);
    17         }
    18     printf("%.4lf
    ",f[0][0]);
    19 
    20     return 0;
    21 }
    View Code
  • 相关阅读:
    Scala实现Mapreduce程序4-----数据去重
    Scala实现Mapreduce程序3----数据排序
    Scala实现Mapreduce程序2-----Top5
    Scala实现Mapreduce程序1-----求平均数
    scala学习--难点
    scala基础--01
    平台调优方案
    beeline on spark 自动重启--脚本
    安装rundeck脚本
    杀死所有的kitchen进程
  • 原文地址:https://www.cnblogs.com/gryzy/p/14426564.html
Copyright © 2011-2022 走看看