【期望DP】 SGU 495 Kids and Prizes

通道

题意: n个盒子里装有礼物,m个人随机选择礼物,选完之后空盒子放回,问选中的礼物数的期望

思路:dp[i]表示第i个人得到礼物的概率,

第i个人得到礼物的概率:假如第i-1个人没有得到礼物,那么i得到礼物的概率和i-1一样。
假如第i-1个人得到了礼物,那么i得到礼物的概率是i-1得到礼物概率减去1/n

代码:

#include<stdio.h>

const int MAXN=100010;
double dp[MAXN];

int main() {
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF) {
        dp[1]=1;
        for(int i=2;i<=m;i++)
            dp[i]=(1-dp[i-1])*dp[i-1]+dp[i-1]*(dp[i-1]-1.0/n);
        double ans=0;
        for(int i=1;i<=m;i++)ans+=dp[i];
        printf("%.10lf\n",ans);
    }
    return 0;
}
View Code

 

posted @ 2015-08-12 16:18  mithrilhan  阅读(119)  评论(0编辑  收藏  举报