SGU 495 — Kids and Prizes

来源:互联网 发布:seo诊断报告 编辑:程序博客网 时间:2024/05/14 08:28

原题:http://acm.sgu.ru/problem.php?contest=0&problem=495

题意:有n个奖品,奖品各自放在盒子里,m个人轮流选取,若盒中有奖品则拿走,但不管怎样,盒子依然放回。问得到奖品数的期望。

思路:1)数学推理

每个奖品不被选中的概率为(1-1/n)^m,那么每个奖品被选中的概率为1-(1-1/n)^m;

所以总期望为n*(1-(1-1/n)^m);


    2)概率dp

dp[i]表示到第i个人得到奖品数的期望;所以dp[i]等于上一个人得到的奖品数加上这个人得到的奖品数;

若此人得到了奖品则概率为(n-dp[i-1])/n, 若没得到则概率为dp[i-1]/n;

所以dp[i] = dp[i-1]+1*(n-dp[i-1])/n+0*dp[i-1]/n;


#include<stdio.h>#include<math.h>double n, m;int main(){while(scanf("%lf%lf", &n, &m)!=EOF)printf("%.9f\n", n*(1-pow((1-1/n), m)));return 0;}



#include<stdio.h>#include<string.h>double n;int m;double dp[100005];int main(){while(scanf("%lf%d", &n, &m)!=EOF){memset(dp, 0, sizeof(dp));dp[1] = 1;for(int i = 2;i<=m;i++)dp[i] = dp[i-1]+(n-dp[i-1])/n;printf("%.9f\n", dp[m]);}return 0;}


0 0