zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    matplotlib
    Scipy-数值计算库
    Django Templates
    Django Views: Dynamic Content
    Django Views and URLconfs
    Opencv读写文件
    Logistic回归
    demo
    【Python62--scrapy爬虫框架】
    【Python58--正则2】
  • 原文地址:https://www.cnblogs.com/-maybe/p/6483428.html
Copyright © 2011-2022 走看看