Description
向一个栈中随机添加 $n le 2000 $ 个括号,求无法配对的括号的期望个数。
Solution
设 (f[i][j]) 表示操作 (i) 次后,有 (j) 个未配对的 (
的概率。
考虑到最终未配对的左右括号期望个数一定是相等的,所以我们算出未配对左括号个数期望即可。
#include <bits/stdc++.h>
using namespace std;
double f[2005][2005],ans;
int n;
signed main()
{
cin>>n;
f[0][0]=1;
for(int i=1;i<=n;i++)
{
f[i][0]=(f[i-1][0]+f[i-1][1])/2;
for(int j=1;j<=i;j++)
{
f[i][j]=(f[i-1][j-1]+f[i-1][j+1])/2;
}
}
for(int i=1;i<=n;i++)
{
ans+=i*f[n][i];
}
printf("%.3lf",2*ans);
}