poj2096 Collecting Bugs
阿新 • • 發佈:2017-11-05
log span 要求 gin href origin 概率 printf blank dp[i+1][j],發現一個bug屬於已有的系統,不屬於已有的分類,概率為 (1-i/n)*(j/s);
dp[i+1][j+1],發現一個bug不屬於已有的系統,不屬於已有的分類,概率為 (1-i/n)*(1-j/s);
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+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(intj=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