ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DTOJ #5873. 求求你别排队了 题解

2022-06-04 18:32:14  阅读:125  来源: 互联网

标签:排列 题解 个数 显然 5873 你别 交换 转移 逆序


求求你别排队了

先解释下最优策略:对于两种策略,选择期望逆序对个数少的。

首先有几个显然的事实:

  1. 如果当前逆序对个数小于操作次数,则可以直接通过交换使逆序对个数归零。
  2. 策略必定是先多次随机,然后剩下次数交换。

我们考虑记 f[n][k] 表示对于一个随机的 \(n\) 排列,还能操作 \(k\) 次的期望逆序对个数。

显然,对于一个确定的 \(n\) 排列,设其逆序对个数为 \(m\)。

  1. 若 \(m\le k\),显然可以不断交换,转移到 \(0\)。
  2. 若 \(m>k\),此时不能不断交换到 \(0\):
    1. 但可以不断交换到逆序对个数为 \(m-k\)。
    2. 当然也可以来一次 BogoSort,即转移到 f[n][k-1]
    3. 我们对两者取 \(\min\) 即可。

不过这是对于一个确定的 \(n\) 排列。对于随机的显然不可能去枚举每个确定的排列然后转移。

不过我们可以记 C[n][m] 表示逆序对个数为 \(m\) 的 \(n\) 排列的方案数,考虑如何转移:

考虑加入一个数 \(n\)。
\(n\) 可以插在最后一个,逆序对贡献为 \(0\);倒数第二个,逆序对贡献为 \(1\);倒数第三个……
显然有下面这个递推式:

\[C_{n,m} = \sum_{i=\max(0,m-n+1)}^m C_{n-1,i} \]

直接转移 \(O(n^4)\),但相信正常人都会做到 \(O(n^3)\) 或者更低。

不过会发现 C[n][m] 显然会爆 long long。我们考虑不记数量,转记概率 P[n][m]。这样对 f[n][k] 也会更好转移(不用乘 \(n!\) 逆元)

然后可以写出 f[n][k] 的递推式了:

\[f_{n,k} = \sum_{i=k+1}^{\frac{n(n-1)}{2}}P_{n,i}\times\min(f_{n,k-1},i-k) \]

解释一下,这里 \(i\) 是在枚举这个 \(n\) 排列的逆序对个数,对于 \(i\le k\) 显然直接交换得到 \(0\),对于 \(i>k\) 考虑 BogoSort 和 直接交换 中较小的一个。

显然,f[n][k]f[n-1] 没有半毛钱关系,可以只记一维。

上面这个转移是 \(O(n^2m)\) 的,考虑优化。

右边那个 \(\min\) 显然有搞头,当 \(f_{k-1} < i-k\) 的时候,右边是常值,可以直接拿 P[n][m] 的前缀和乘。

但这样不知道能优化多少。

我们输出一下 f[k],发现在 \(k\) 较大时 \(f_k\approx0\),几乎就是 \(O(1)\) 转移了。并且如果把循环次数累加起来输出的话,会发现不超过 \(10^8\)。

所以时间复杂度 \(O(n^3)\sim O(10^8)=O(n^3)\sim O(1)\)。能通过此题。

至于题目事先给了确定的排列,我们直接在第一步选择 BogoSort 转移到 f[m-1] 或者暴力交换转移到 \(\sigma(a_1,a_2,\cdots,a_N)-m\)。

标签:排列,题解,个数,显然,5873,你别,交换,转移,逆序
来源: https://www.cnblogs.com/lingfunny/p/16342401.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有