Everything Is Generated In Equal Probability

\[
Time Limit: 1000 ms\quad Memory Limit: 131072 kB
\]

题意

给出一个 \(N\),以相等的概率生成 \(n\) 且 \(n \in [1, N]\),在以相等的概率生成长度为 \(n\) 的数组,最后将生成的数组扔到 \(CALCULATE\) 函数并返回一个数,问这个数的期望。

思路

先解释一下样例是怎么得来的。
令 \(dp[array]\) 表示数组 \(array\) 扔到函数里得到的期望,\(pair[array]\) 表示数组 \(array\) 中逆序对的数量。

\[
dp[array] = \frac{1}{A_{len(array)}^{len(array)}} \sum\left(dp[subsequence] + pair[subsequence]\right) \\
ans = \frac{1}{N}\sum_{n=1}^{N} \frac{1}{A_n^n}\sum_{len(array)=n}\left(dp[array] + pair[array]\right)
\]

\(N=2\):

  • \(\frac{1}{2}\) 概率得到 \(n=1\),只有一个 \(array=[1]\),显然 \(dp[ [1] ] = 0\)
  • \(\frac{1}{2}\) 概率得到 \(n=2\),此时有 \(\frac{1}{2}\) 生成 \(array=[1,2]\),\(\frac{1}{2}\) 生成 \(array=[2,1]\),则
    \[
    \begin{aligned}
    &dp[[1,2]] = \frac{1}{4}((dp[[1]]+0) + (dp[[2]]+0) + (dp[[1,2]]+0) + (dp[[\emptyset]]+0)) \\
    \implies&dp[[1,2]] = 0\\
    &dp[[2,1]] = \frac{1}{4}((dp[[1]]+0) + (dp[[2]]+0) + (dp[[2,1]]+1) + (dp[[\emptyset]]+0)) \\
    \implies&dp[[2,1]] = \frac{1}{3}\\
    &\emptyset 表示空集
    \end{aligned}
    \]
    所以当 \(N=2\) 时的期望就是
    \[
    ans = \frac{1}{2}\left((dp[[1]]+0) + \frac{1}{2}((dp[[1,2]]+0) + (dp[[2,1]]+1))\right)= \frac{1}{3}
    \]

\(N=3\) 同理,可以自行计算并算出每个序列的 \(dp\) 值。

计算 \(N=3\) 后,我们发现 \(dp[[1,2,3]] = \frac{0}{3}, dp[[2,1,3]] = \frac{1}{3}, dp[[2,3,1]]=\frac{2}{3},dp[[3,2,1]]=\frac{3}{3}\),在加上之前算出的 \(dp[[1,2]] = \frac{0}{3}\),\(dp[[2,1]] = \frac{1}{3}\),我们可以猜想 \(dp[array] = \frac{pari[array]}{3}\),可以继续计算 \(n=4\) 的情况,同样满足猜想。

回到最初始的式子
\[
\begin{aligned}
ans &= \frac{1}{N}\sum_{n=1}^{N} \frac{1}{A_n^n}\sum_{len(array)=n}\left(dp[array] + pair[array]\right) \\
&= \frac{1}{N}\sum_{n=1}^{N} \frac{1}{A_n^n} \left(\frac{4\sum_{len(array)=n} pair[array]}{3}\right)
\end{aligned}
\]
令 \(f[i]\) 表示 \(\sum_{len(array)=i} pair[array]\),只要计算出这个,最后的答案就可以 \(O\left(N\right)\) 得到。
对于一个长度为 \(n\) 的序列,我们假设把这个序列的最后一个数字拿掉,前面的 \(n-1\) 个数的 \(pair\) 数其实就可以看成 \(f[n-1]\) 的贡献,一共有 \(n\) 个数字可以拿掉,所以前 \(n-1\) 个数字这部分的总贡献就是\(n*f[n-1]\)。
现在把最后一个数字加进来,当加入的数字是 \(i\) 时,和其他 \(n-1\) 个数字会产生 \(\left(n-i\right)\) 对逆序对,剩余的 \(n-1\) 个数都在前面,可以随便排列,所以它的贡献就是 \(A_{n-1}^{n-1}\left(n-i\right)\),则最后一个数字这部分的总贡献就是 \(\sum_{i=1}^{n} A_{n-1}^{n-1}\left(n-i\right) = A_{n-1}^{n-1} \sum_{i=1}^{n-1}i\)。
现在就可以得到 \(f[i]\) 的线性递推式
\[
f[n] = n*f[n-1]+A_{n-1}^{n-1}\sum_{i=1}^{n-1}i
\]
我们队最后把 \(f[i]\) 扔到 \(oeis\) 里面去....发现居然有 \(O\left(1\right)\) 公式 \(\frac{n!n(n-1)}{4}\),打扰了....
最后只要把 \(f[i]\) 打表预处理出来,最后的答案就可以进一步化简
\[
ans = \frac{1}{N} \sum_{n=1}^{N} \frac{1}{A_n^n}\frac{4f[n]}{3}
\]
最后发现网上说 \(ans\) 居然又有 \(O\left(1\right)\) 公式 \(\frac{N^2-1}{9}\)

HDU 6595 Everything Is Generated In Equal Probability (期望dp,线性推导)的更多相关文章

  1. HDU-多校2-Everything Is Generated In Equal Probability(公式+逆元)

    Problem Description One day, Y_UME got an integer N and an interesting program which is shown below: ...

  2. hdu多校第二场 1005 (hdu6595) Everything Is Generated In Equal Probability

    题意: 给定一个N,随机从[1,N]里产生一个n,然后随机产生一个n个数的全排列,求出n的逆序数对的数量,加到cnt里,然后随机地取出这个全排列中的一个非连续子序列(注意这个子序列可以是原序列),再求 ...

  3. 【HDOJ6595】Everything Is Generated In Equal Probability(期望DP)

    题意:给定一个N,随机从[1,N]里产生一个n, 然后随机产生一个n个数的全排列,求出n的逆序数对的数量并累加ans, 然后随机地取出这个全排列中的一个子序列,重复这个过程,直到为空,求ans在模99 ...

  4. ACM的探索之Everything is Generated In Equal Probability! 后序补充丫!

    Problem Desciption: 百度翻译后的汉化: 参见博客:https://www.cnblogs.com/zxcoder/p/11253099.html https://blog.csdn ...

  5. ACM的探索之Everything Is Generated In Equal Probability(这真的是很有趣的话语丫!)

    ---------------------------------------步履不停,奋勇前进! ------------------------难度真的是蛮大丫!后序补充!

  6. [hdu6595]Everything Is Generated In Equal Probability

    计算一对逆序对的贡献,即在n个数期望要删多少步才能删掉其中的两个数,设f(n)表示此时的期望,则有方程$f[n]=3/4+(\sum_{i=2}^{n}f[i]\cdot c(n-2,i-2))/2^ ...

  7. HDU 4405 Aeroplane chess 期望dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 Aeroplane chess Time Limit: 2000/1000 MS (Java/ ...

  8. HDU 4405 Aeroplane chess(期望dp)

    Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. HDU 6656 Kejin Player (期望DP 逆元)

    2019 杭电多校 7 1011 题目链接:HDU 6656 比赛链接:2019 Multi-University Training Contest 7 Problem Description Cub ...

随机推荐

  1. Java学习:final关键字的使用与注意事项

    final 关键字代表最终.不可改变的. 常见的四种用法 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部变量 可以用来修饰一个成员变量 1.当final关键字用来修饰一个类的时候,格式 ...

  2. Java 8——Lambda表达式

    本篇文章不介绍Lambda的前世今生,这里只对Lambda表达的应用做详细了解.以及与内部类的差异点. Lambda表达式 Lambda表达式是Java SE 8版本中引入的新的语法糖.将功能看做方法 ...

  3. Mysql——查看数据库,表占用磁盘大小

    .查询所有数据库占用磁盘空间大小 select TABLE_SCHEMA, concat(,),' MB') as data_size, concat(,),'MB') as index_size f ...

  4. spring Boot 学习(七、Spring Boot与开发热部署)

    一.热部署在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间 花费,我们希望不重启应用的情况下,程序可以自动部署(热部署).有以下四 种情况,如何能实现热部署.•1.模板引擎 ...

  5. c# mvc使用富文本编辑器数据上传回显问题,图片,附件上传解决方案

    1.首先去官网下载编辑器:http://ueditor.baidu.com/website/download.html   我用的是asp.net  mvc开发模式所以选的是asp 2.前端页面必须引 ...

  6. linux部署安装SRS流媒体服务器教程

    这段时间一直在搞RTMP流媒体直播项目,期间踩过很多坑,刚开始是用的nginx-rtmp作为流媒体转发服务器,但是效果并不尽人意,推拉流不稳定,特别是拉流,速度特别慢,平均要十多秒才能拉到流,并且交互 ...

  7. 树莓派安装使用docker

    2019/11/11, 树莓派4B, Raspbian Buster,Docker 19.03.4 摘要:树莓派Raspbian Buster中安装Docker,Dockerfile更改软件源 安装d ...

  8. 2019 金蝶java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.金蝶等公司offer,岗位是Java后端开发,因为发展原因最终选择去了金蝶,入职一年时间了,也成为了面试官,之 ...

  9. 在win10、Ubuntu双系统下,卸载Ubuntu

    一.Win下确定ubuntu的磁盘分区 这个步骤是为了删除Ubuntu的系统分区,这种直接删除的方式来重新安装ubuntu的低版本比较省事. (1)右键计算机->管理->磁盘管理,打开磁盘 ...

  10. FreePascal - CodeTyphon 和 Lazarus, 如何像Delphi一样有代码之间的连线?

    CodeTyphon 6.9 默认CodeTyphon没有开启代码之间连线功能,一直不知道如何调出来,在使用CodeTyphon 和 Lazarus 很渴望也能像Delphi那样有这种功能,实际上它们 ...