F - Dice (III) LightOJ - 1248

F - Dice (III)

LightOJ - 1248

题目描述:

掷出有n面的色子的全部面,求他的期望。

分析:

期望dp,假设掷出i面,dp[i]表示掷出i面的期望。每次会掷出2种情况:1.掷出不同的面,转移到i+1面,概率为(n-i)/n。2.掷出相同的,状态还是i面,概率为i/n。

且花费为1(每次要投一次)。dp方程:dp[i]=( dp[i+1]+1 ) * (n-i)/n+( dp[i]+1 ) *i/n,化简为dp[i]=dp[i+1]+1+i/(n-i)。(期望dp要逆推)

代码:

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
const int maxn=1e5+6;
double dp[maxn];
int main()
{
    int T,n;
    cin>>T;
    for(int j=1;j<=T;j++)
    {
        cin>>n;
        dp[n]=0;
        for(int i=n-1;i>=0;i--)
        {
            dp[i]=dp[i+1]+1+i*1.0/(n-i);
        }
        printf("Case %d: %.7f\n",j,dp[0]);
    }   
    return 0;
}
 

 

posted on 2020-03-06 10:05  Aminers  阅读(100)  评论(0编辑  收藏  举报

导航