zoukankan      html  css  js  c++  java
  • 【POJ】【2096】Collecting Bugs

    概率DP/数学期望

      kuangbin总结中的第二题

      大概题意:有n个子系统,s种bug,每次找出一个bug,这个bug属于第 i 个子系统的概率为1/n,是第 j 种bug的概率是1/s,问在每个子系统中至少找出一个bug,且每种bug都找到过,总共需要找到bug的总数的期望值(我擦我这破烂语文水平……还不如不翻译)

      题解:http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710621.html

      额之前理解的有些偏差……重新梳理一下:

        现在已经找到s种bug,且它们分属于n个系统,则到达目标状态(n,s)的期望为0。

        若现在已经找到s-1种bug,且它们分属于n-1个系统,则到达目标状态(n,s)的期望为……

        啊总之f[i][j]表示的是现在已经找到 i 种bug,且它们分属于 j 个系统,继续找一直找到(n,s)的期望(相当于从最终态【全部找完】逆推回来)

        所以答案就是f[0][0]即一个bug也没找到时,到达(n,s)的期望……sigh我语文水平果然差……

     1 //POJ 2096
     2 #include<cstdio>
     3 #include<cstring>
     4 #define D(i,j,n) for(int i=j;i>=n;--i)
     5 #define pb push_back
     6 using namespace std;
     7 
     8 double f[1010][1010];
     9 int main(){
    10     int n,s;
    11     while(scanf("%d%d",&n,&s)!=EOF){
    12         memset(f,0,sizeof (f));
    13         D(i,n,0)
    14             D(j,s,0){
    15                 if (i==n && j==s) continue;
    16                 double p1=(double(s-j)*i)/n/s,
    17                        p2=(double(n-i)*j)/n/s,
    18                        p3=(double(n-i)*(s-j))/n/s,
    19                        p0=1.0-(double(i*j))/n/s;
    20                 f[i][j]=p1*f[i][j+1]+p2*f[i+1][j]+p3*f[i+1][j+1]+1;
    21                 f[i][j]/=p0;
    22             }
    23         printf("%.4f
    ",f[0][0]);
    24     }
    25     return 0;
    26 }
    View Code
  • 相关阅读:
    JMS学习四(ActiveMQ消息过滤)
    JMS学习三(ActiveMQ消息的可靠性)
    JMS学习二(简单的ActiveMQ实例)
    JMS学习一(JMS介绍)
    Linux iostat监测IO状态
    git删除所有提交历史记录
    MySQL查看数据库相关信息
    Java面试通关要点汇总集
    java开发需掌握技能2
    java开发需掌握技能1
  • 原文地址:https://www.cnblogs.com/Tunix/p/4300399.html
Copyright © 2011-2022 走看看