题意:
给出一个骰子,该骰子有m个面,每个面有等可能正面朝上,问投掷n次之后,n次中的最大值的的期望值是多少
思路:
对于期望题,我们分两种思路:
1、通过dp的方式转移出最终结果
2、期望=权值*概率
由于该题的状态表示与状态转移并没有很好实现的方式,我们考虑第二种方式,首先本题最大值即为权值,我们只需要考虑最大值为1-m中的每个值的概率是多少,然后求和即可
一共n次投掷,每次m种情况,则共有:
n次投掷,每次的结果都在1-k之间的情况数:
n次投掷,每次的结果都在1-(k-1)的情况数:
根据容斥原理,n次投掷,最大值为k的情况数(结果都在1-k之前,但k至少出现1次)为:
则有:
转化公式则有:
Accode:
#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
#define INFF 0x3f3f3f3f3f3f3f3f
#define int long long
#define fix fixed<<setprecision
#define pb push_back
#define Mirai ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef pair<int,int> pii;
double n,m;
void solve()
{
cin>>m>>n;
double res=0;
for(int i=1;i<=m;i++)
{
res+=i*(pow(i/m,n)-pow((i-1)/m,n));
}
cout<<fix(12);
cout<<res<<endl;
}
signed main()
{
Mirai;
int T=1;
//cin>>T;
while(T--)
{
solve();
}
}