http://blog.youkuaiyun.com/u014427196/article/details/46425645
http://www.ifrog.net/acm/problem/1055
题意:
一个盒子一开始有n个球,每个球标号唯一,先执行操作1,如果两个球x,y满足|x-y|不在盒子里,那么久把|x-y|放进去,设操作次数为p1,然后执行操作2,不断摸球,直到所有球都被摸过,设操作次数为p2,求p1+p2的期望。
思路:
如果两个球x,y在盒子里,设x>=y,那么gcd(x,y) == gcd(x,x-y),可以推出最后所有数的gcd等价于一开始所有数的gcd,那么操作1的次数就是最大的数/gcd。
操作2的次数容易推导,设dp[i]表示已经摸了i个球,直到摸完所有球的期望次数。显然有 dp[n]=0,dp[i]=i/n?dp[i]+(n?i)/n?dp[i+1]+1
化简下dp[n] = 0, dp[i] = dp[i+1]+n/i。
那么dp[0] = n*Hn,其中Hn是调和级数。
然后算就行了。
注意需要特判0。

本篇博文解析了一道ACM题目,题目要求计算对盒子内的球进行特定操作后的总期望次数。通过数学推导得出操作1次数与最大球编号及初始球集合的最大公约数的关系,并给出操作2期望次数的递推公式。
6128

被折叠的 条评论
为什么被折叠?



