LightOJ 1248 Dice (III) 概率DP

Dice (III) LightOJ - 1248

扔一个 nn 面筛子,问要看到每一个面至少一次需要扔的期望数。

dp[i]dp[i] 为已经扔了 ii 个面的期望值,则 dp[n]=0dp[n]=0,有:

dp[i]=1+indp[i]+nindp[i+1]dp[i]=nni+dp[i+1] \begin{aligned} dp[i]&=1+\frac{i}{n}dp[i]+\frac{n-i}{n}dp[i+1]\\ dp[i]&=\frac{n}{n-i}+dp[i+1] \end{aligned}

代码如下(期望倒推):

#include<iostream>
#include<cstdio>
//#define WINE
#define MAXN 100010
using namespace std;
int T,iCase,n;
double dp[MAXN];
int main(){
#ifdef WINE
    freopen("data.in","r",stdin);
#endif
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        dp[n]=0;
        for(int i=n-1;i>=0;i--)
            dp[i]=dp[i+1]+1.0*n/(n-i);
        printf("Case %d: %.8lf\n",++iCase,dp[0]);
    }
    return 0;
}

在这里插入图片描述

发布了37 篇原创文章 · 获赞 0 · 访问量 300
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览