cf601C. Kleofáš and the n-thlon 概率dp

有m个人同时参加了n场比赛,然后每一场比赛有个rank,rank没有重复,然后现在计算总rank,

首先一个人的总分数等于他的n场比赛的rank之和,

然后一个人的总排名等于总分数比他少的人的个数+1

(这个时候总的rank就有可能有重复了)

然后现在一个人的n场比赛的rank分别是a1,...,an,(1<=ai<=m),然后问他的总rank的期望值

n<=100,m<=1000

首先直接计算期望值肯定是很难的,我们转化一下,他的总分数固定了,求总分数比他小的人的期望值e,

那么他的期望值就是e + 1了。

f(i,j)表示前i场比赛,总分数为j的人数的期望

f[101][101*1000]

f(0,0) = m - 1

在递推的过程我们只需要考虑m-1个人,这个固定了的人就不用管了。

注意a[i]的位置被他占据了,这个位置不能放其他人了。

考虑f(i,j),现在我们知道前i场比赛分数为j的人有f个了,对于第i+1场的k(k != a[i+1])这个分数,

m-1个人每一个人在这个位置的概率都是1/(m-1),所以这f个人中有人在这个位置的概率是

f/(m-1),然后对f(i+1,j+k)的贡献就是1 * f/(m-1)了

然后这个递推过程也非常好,但是复杂度是O(m*n^3)的

发现递推可以用前缀和优化,

f(i,j)表示前i场比赛,总分数<=j的人数的期望就可以了

O(m*n^2)

 

posted on 2017-03-01 11:28  _fukua  阅读(242)  评论(0编辑  收藏  举报