传送门: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<<"* "; } printf("%.7f",ans); return 0; }