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. Reliable Multicast Programming(PGM)协议

    Reliable Multicast Programming (PGM)实际通用可靠多播协议,在某种程度上保证多播的可靠性.是IP上层协议,和TCP还有UDP同级,工作在传输层. 在组播传输视频项目中 ...

  2. C语言指向函数的指针

    定义形式:类型 (*指针变量名)(参数列表); 例如:int (*p)(int i,int j); 在这里 int是函数的返回类型,*p是指向函数的指针,(int i,int j);是函数的参数 注意 ...

  3. Oulipo 子串查找

    题目描述 思路 使用哈希值表示较长串的子串的值,直接比较哈希值是否相等 代码 #include <cstdio> #include <cstring> using namesp ...

  4. Application.mk文件官方使用说明

    本文档介绍了 ndk-build 所使用的 Application.mk 编译文件. 我们建议先阅读概念页面,然后再阅读本页面. 概览 Application.mk 指定了 ndk-build 的项目 ...

  5. 【题解】物流运输 [ZJ2006] [P1772] [BZOJ1003]

    [题解]物流运输 [ZJ2006] [P1772] [BZOJ1003] 传送门:物流运输 \([ZJ2006]\) \([P1772]\) \([BZOJ1003]\) [题目描述] 给定一个含 \ ...

  6. NuGet包 安装相关指令

    一.安装 1.安装指定版本类库install-package <程序包名> -version <版本号> 2.安装到指定的项目install-package <程序包名& ...

  7. js 时间格式化成字符串

    我用的简单的直接的字符串格式转化 function getTimeStr() { var date = new Date(); var year = date.getFullYear(); var m ...

  8. rsync 排除指定目录

    背景 将Server1上的数据同步到Server2: Server1目录结构: /us_data/yahoo └── qlib ├── calendars ├── dataset_cache ├── ...

  9. 老生常谈之js深拷贝与浅拷贝

    前言 经常会在一些网站或博客看到"深克隆","浅克隆"这两个名词,其实这个很好理解,今天我们就在这里分析一下js深拷贝和浅拷贝. 浅拷贝 我们先以一个例子来说明 ...

  10. SpringBoot,SSM和SSH

    Springboot的概念: 是提供的全新框架,使用来简化Spring的初始搭建和开发过程,使用了特定的方式来进行配置,让开发人员不在需要定义样板化的配置.此框架不需要配置xml,依赖于想MAVEN这 ...