poj 2096 Collecting Bugs(概率dp)

来源:互联网 发布:基于单片机设计作品 编辑:程序博客网 时间:2024/05/16 19:23

题意:

给出n,s分别表示有s个系统,每个系统有n个bug

求n个bug每种系统都有bug的天数的期望

题解:

转自:大牛博客

#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;//typedef __int64 lld;#define oo 0x3f3f3f3f#define Mod 1000000007#define maxn 1000+5double dp[maxn][maxn];int main(){    int n,s;    double p1,p2,p3,p4;    while(scanf("%d %d",&n,&s)!=EOF)    {        memset(dp,0,sizeof dp);        for(int i=n;i>=0;--i)        {            for(int j=s;j>=0;--j)            {                if(i==n&&j==s)continue;                p1=1.0*i*(s-j)/(1.0*n*s);                p2=1.0*(n-i)*j/(1.0*n*s);                p3=1.0*(n-i)*(s-j)/(1.0*n*s);                p4=1.0*i*j/(1.0*n*s);                dp[i][j]=(p1*dp[i][j+1]+p2*dp[i+1][j]+p3*dp[i+1][j+1]+1)/(1-p4);            }        }        printf("%.4f\n",dp[0][0]);    }    return 0;}






























0 0