1 条题解
-
0
f[i][0/1]表示前i个珠子,最后一个珠子和第一个是否相同(0不同,1相同)的期望值
这样可以 比较容易地 得到一个n^2的转移
p[i]表示i个珠子的颜色都相同的概率
至于统计答案
ans=p[n]*n表示环上只有一种颜色
for(int i=1;i<n;i++)ans+=iif[n-i][0]*p[i]
这步是枚举第一珠子所在连续段长度,相当于n个位置里,有i个位置是第一珠子所在连续段,故长度i共有i种摆法
#include<bits/stdc++.h> using namespace std; double ans,p[205],f[205][2]; int main() { int n,m;scanf("%d%d", &n, &m); p[1]=1;for(int i=2;i<=n;i++)p[i]=p[i-1]*1/m; f[0][1]=1; for(int i=0;i<=n;i++) for(int j=i+1;j<=n;j++) { f[j][0]+=(j-i)*p[j-i]*f[i][0]*(m-2)/m; f[j][0]+=(j-i)*p[j-i]*f[i][1]*(m-1)/m; f[j][1]+=(j-i)*p[j-i]*f[i][0]*1/m; } ans=p[n]*n; for(int i=1;i<n;i++) ans+=i*i*f[n-i][0]*p[i]; printf("%.5lf",ans); return 0; }
- 1
信息
- ID
- 3866
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者