7.6 OPOJ 2096Collecting Bugs

来源:互联网 发布:科比与詹姆斯数据对比 编辑:程序博客网 时间:2024/06/05 18:21

题意:

有s个系统,有n种bug,bug的数量不限,一位程序员每天可以发现一个bug 现在求发现n种bug存在s个系统中并且每个系统都要被发现bug的平均天数


思路:设dp[i][j]表示发现了i个bug分别属于j个系统的天数期望,则有这些递推:

dp[i][j]->dp[i+1][j+1];//在一个新的系统里面发现一个新的bug 
dp[i][j]->dp[i+1][j];//在原来已发现过bug的系统里发现一个新的bug 
dp[i][j]->dp[i][j+1];//在一个新的系统里面发现一个已被发现过的bug 
dp[i][j]->dp[i][j];//在已发现过bug的系统发现已发现过的bug



代码:

#include <cstring>#include <cstdio>using namespace std;double dp[1001][1001];int main(){    int n,s;    while(~scanf("%d%d",&n,&s)){        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;            double p1=(n-i)*j*1.0,                p2=i*(s-j)*1.0,                p3=(n-i)*(s-j)*1.0,                p4=(n*s-i*j)*1.0;            dp[i][j]=(p1*dp[i+1][j]+p2*dp[i][j+1]+p3*dp[i+1][j+1]+n*s*1.0)/p4;        }        printf("%.4f\n",dp[0][0]);    }    return 0;}

0 0
原创粉丝点击