[POJ 2096] Collecting Bugs

Posted Ngshily

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[POJ 2096] Collecting Bugs相关的知识,希望对你有一定的参考价值。

一个程序有无限个bugs,一天可以找到1个,这些bugs有两个不同关键字A,B,分别按这两个关键字被分成了n种和m种,求集齐所有类(召唤神龙)的期望天数

设dp[i][j]表示已经收集了i种A和j种B的期望天数

dp[i][j]=i/n*j/s*dp[i][j]+p

p=(n-i)/n*j/s*dp[i+1][j]+i/n*(s-j)/s*dp[i][j+1]+(n-i)/n*(s-j)/s*dp[i+1][j+1]+1

移项得dp[i][j]=p*n*s/(n*s-i*j)

 当n*s=i*j时狗带

ans=dp[0][0]

深刻体会到了kuangbin大爷说的求期望多逆推QAQ

 1 #include<cstdio>
 2 using namespace std;
 3 #define maxn 1005
 4 double dp[maxn][maxn];
 5 int main(){
 6     int n,s;
 7     while(scanf("%d%d",&n,&s)!=EOF){
 8         dp[n][s]=0;
 9         for(int i=n;i>=0;i--)
10             for(int j=s;j>=0;j--){
11                 if(n*s==i*j)continue;
12                 dp[i][j]=dp[i+1][j]*(n-i)/n*j/s+dp[i][j+1]*i/n*(s-j)/s+dp[i+1][j+1]*(n-i)/n*(s-j)/s+1;
13                 dp[i][j]*=1.0*n*s/(n*s-i*j);
14             }
15         printf("%.4lf\\n",dp[0][0]);
16     }
17     return 0;
18 }
View Code

 

以上是关于[POJ 2096] Collecting Bugs的主要内容,如果未能解决你的问题,请参考以下文章

POJ2096 Collecting Bugs

[poj2096] Collecting Bugs概率dp 数学期望

POJ 2096:Collecting Bugs 概率DP求期望

POJ 2096 Collecting Bugs:期望dp

POJ 2096Collecting Bugs 概率期望dp

poj 2096 Collecting Bugs (概率dp)