首页 > 其他 > 详细

SPOJ Favorite Dice(概率dp)

时间:2020-09-12 11:05:51      阅读:56      评论:0      收藏:0      [点我收藏+]

题意:

一个骰子,n个面,摇到每一个面的概率都一样。问你把每一个面都摇到至少一次需要摇多少次,求摇的期望次数

 

题解:

dp[i]:已经摇到i个面,还需要摇多少次才能摇到n个面的摇骰子的期望次数

因为我们只知道dp[n]的值,所以我们只能倒推,dp[n]=0(感觉大部分概率dp都是倒推~~~~)

dp[i]=i/n*dp[i]+(n-i)/ndp[i+1]+1

化简一下:

dp[i]=dp[i+1]+n/(n-i)

 

代码:

 

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=1e3+10;
double dp[maxn];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        double n;
        memset(dp,0,sizeof(dp));
        scanf("%lf",&n);
        dp[int(n)]=0.0; 
        for(int i=n-1;i>=0;--i)
        {
            
            dp[i]=dp[i+1]+n/(n-i);
        }
        printf("%.2lf\n",dp[0]);
    }
    return 0;
}

 

SPOJ Favorite Dice(概率dp)

原文:https://www.cnblogs.com/kongbursi-2292702937/p/13655959.html

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