码迷,mamicode.com
首页 > 其他好文 > 详细

[POJ 2096] Collecting Bugs

时间:2016-05-23 13:08:30      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

一个程序有无限个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

标签:

原文地址:http://www.cnblogs.com/Ngshily/p/5519538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!