D - Deceptive Dice 期望&思维

传送门:https://vjudge.net/contest/370208#problem/D

题意

  给你一个有n个面的骰子,点数由1到n,可以投k次,不一定要k次,最终得分是最后一次的点数,求得分期望。

思路

  例如n=20,k=3,在第一次的时候,得分期望为10.5(1到20的平均数),k=2的时候,点数1到10的结果不会取,因为第一次的得分期望已经是10.5了,只会在点数11到20里取,那么第二次摇到1到10的概率为10/20设为f,摇到11到20的概率为1-f,所以k=2的时候的得分期望就是10.5*f+(11+20)/2*(1-f),以此类推。

AC代码

#include<iostream>
#include<math.h>
#include<vector>
#include<stdio.h>
using namespace std;
int n,k;
double ans;
int main()
{
    cin>>n>>k;
    double ans=0;
    for(int i=1;i<=k;i++){
        int num=floor(ans);
        double f=num*1.0/n;
        ans=ans*f+(1-f)*((num+1+n)*1.0/2);
        //cout<<ans<<"*\n";
    }
    printf("%.7f",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/qq2210446939/p/12793335.html