首页 > 其他 > 详细

【SPOJ1026】FAVDICE - Favorite Dice[概率dp]

时间:2019-08-23 15:00:23      阅读:106      评论:0      收藏:0      [点我收藏+]

SPOJ FAVDICE luogu SPOJ1026

一个n面的骰子,求期望掷几次能使得每一面都被掷到

优惠券收集者问题

f[i]表示已掷到i面,期望掷多少面才能使每一面都掷到

\(\frac in\)的概率掷到已掷到的,\(\frac{n-i}f\)的概率掷到未掷到过的

所以\(f[i]=\frac in \times f[i] +\frac {n-i}n \times f[i+1]+1\)

\(掷到已掷到的概率\times已掷到i面还期望掷的次数+掷到未掷到的概率\times掷到i+1面还期望掷的次数\)至少得掷一次所以后面+1

化简得\(f[i]=f[i+1]+\frac n{n-i}\)

#include <iostream>
using namespace std;
const int N=10000+5,M=20000+5,inf=0x3f3f3f3f,P=19650827;
int n;double f[N];
template <class t>void rd(t &x){
    x=0;int w=0;char ch=0;
    while(!isdigit(ch)) w|=ch=='-',ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    x=w?-x:x;
}

int main(){
//  freopen("in2.txt","r",stdin);
    //freopen("xor.out","w",stdout);
    int T;rd(T);
    while(T--){
        rd(n);f[n]=0;
        for(int i=n-1;i>=0;--i) f[i]=f[i+1]+(double)n/(n-i);
        printf("%.2lf\n",f[0]);
    }
    return 0;
}

【SPOJ1026】FAVDICE - Favorite Dice[概率dp]

原文:https://www.cnblogs.com/lxyyyy/p/11397812.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!