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单例模式中双重校验锁的实现目的及原理

    开始复习设计模式,一开始理解单例模式中的双重校验锁卡住了,想通了后就自己做了段思维导图来帮助自己理解. 其实理解下来并不难,但还是记录下来帮助自己回忆和借机试试养成写博客的习惯~ public cla ...

  2. springboot初体验-不知道怎么创建spring-boot项目?

    https://spring.io/projects/spring-boot/ 在以上地址找到 Quick start Bootstrap your application with Spring I ...

  3. 配置两个不同kerberos认证中心的集群间的互信

    两个Hadoop集群开启Kerberos验证后,集群间不能够相互访问,需要实现Kerberos之间的互信,使用Hadoop集群A的客户端访问Hadoop集群B的服务(实质上是使用Kerberos Re ...

  4. FindWindow和FindWindowEx函数使用

    FindWindow(   lpClassName,        {窗口的类名}   lpWindowName: PChar {窗口的标题} ): HWND;              {返回窗口的 ...

  5. 2019 东方财富网java面试笔试题 (含面试题解析)

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

  6. python数据分析三剑客之: pandas操作

    pandas的操作 pandas的拼接操作 # pandas的拼接操作 级联 pd.concat , pd.append 合并 pd.merge , pd.join 一丶pd.concat()级联 # ...

  7. windows 下安装 node 以及安装 git 指令使用

    一.先百度搜索 node 找 Download | Node.js 二.下载 Node 根据你自己的操作系统下载 三.安装 node (注意:如果安装失败,使用管理员身份打开安装) 四.安装成功之后 ...

  8. jQuery中的DOM操作【续】

    一.复制节点$(选择器字符串).clone(false)    [返回克隆的节点对象]参数:false,浅复制,复制元素但不复制元素中所绑定的事件[默认为false]true,深复制,复制元素且复制元 ...

  9. Java 之 LinkedHashSet 集合

    一.概述 java.util.LinkedHahset 集合 extends HashSet 集合 在HashSet下面有一个子类java.util.LinkedHashSet,它的底层是一个哈希表( ...

  10. HTML 结构标签(div+span)

    一.div 标签 div 就是 division 的缩写 分割, 分区的意思 常见的用途是文档布局. 二.span 标签 span, 跨度,跨距:范围 <span> 元素可用于为部分文本设 ...