ICPC公司为 M 位获胜者准备了 N 分奖品。奖品放在一个房间里,获胜者轮流进去挑选
奖品,如果里面有奖品,获胜者可以拿走它。无论是否有奖品,ICPC公司都会把包装盒
封起放回房间。求ICPC要送出的奖品数的期望。
每个人选取奖品都是互不影响的。
根据期望的定义,我们可以算出每位获奖者拿到礼品的概率dp[i]。
期望E = Σ(dp[i]);
第i个人拿到奖品的概率是:如果第i-1个人拿到奖品,那他的概率在之前的人的概率上
减去(1 / n),否则和第i-1个人的概率一样。
dp[i] = dp[i-1] * (dp[i-1] - 1.0/N) + (1 - dp[i-1]) * dp[i-1];
/***********************************************
** problem ID : sgu_495.cpp
** create time : Thu Jul 23 19:37:14 2015
** auther name : xuelanghu
** auther blog : blog.csdn.net/xuelanghu407
**********************************************/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
double dp[100010];
int main () {
int M, N;
cin >> N >> M;
dp[1] = 1.0;
double ans = 1.0;
for (int i=2; i<=M; i++) {
ans += dp[i] = dp[i-1] * (dp[i-1] - 1.0/N) + (1.0 - dp[i-1]) * dp[i-1];
}
printf ("%.10lf\n", ans);
return 0;
}