【期望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; }