1. 程式人生 > >poj2096 Collecting Bugs

poj2096 Collecting Bugs

log span 要求 gin href origin 概率 printf blank

Collecting Bugs

POJ - 2096

題意:一個軟件有s個子系統,會產生n種bug,某人一天發現一個bug,這個bug屬於一個子系統,屬於一個分類,每個bug屬於某個子系統的概率是1/s,屬於某種分類的概率是1/n,問發現n種bug,每個子系統都發現bug的天數的期望。

思路:dp[i][j]表示已經找到i種bug,j個系統的bug,達到目標狀態的天數的期望,dp[n][s]=0;要求的答案是dp[0][0];

dp[i][j],發現一個bug屬於已經有的i個分類和j個系統。概率為(i/n)*(j/s);
dp[i][j+1],發現一個bug屬於已有的分類,不屬於已有的系統.概率為 (i/n)*(1-j/s);

dp[i+1][j],發現一個bug屬於已有的系統,不屬於已有的分類,概率為 (1-i/n)*(j/s);
dp[i+1][j+1],發現一個bug不屬於已有的系統,不屬於已有的分類,概率為 (1-i/n)*(1-j/s);

#include<iostream>
#include<cstdio>
using namespace std;
int n,s;
double f[1010][1010];
int main(){
    scanf("%d%d",&n,&s);
    for(int i=n;i>=0;i--)
        for(int
j=s;j>=0;j--){ if(i==n&&j==s)continue; f[i][j]=((n-i)*j*f[i+1][j]+i*(s-j)*f[i][j+1]+(n-i)*(s-j)*f[i+1][j+1]+n*s)/(n*s-i*j); } printf("%.4lf",f[0][0]); return 0; }

poj2096 Collecting Bugs