重庆八中周赛 10


\[\large \text{Round 4 : cqbz Weekly Round 10} \]

一言:
无论你在哪里,就算我看不见你,我也会一直注视着你。
——妖精的尾巴

\(\text{D: cloud}\)

如果把买入和卖出分开处理显然会有一些繁琐,所以我们考虑把他们合在一起,那么买入的利润就是价格的相反数,而卖出就会失去核心。

我们可以很显然的想到将核心当作容量,利润当作价值,定义 \(dp_i\) 表示还剩下核心数量为 \(i\) 的最大利润,那么显然就可以想到一个 \(01\) 背包 \(\text{DP}\)

但是只是单纯这样的话,我们会发现,对于一些卖出,他可能时钟频率不合法。

所以我们考虑将时钟频率从小到大排序,然后根据最开始的分析来一遍背包 \(DP\),最后枚举还剩下多少个核心,取一个最大值即可。(特别的,对于时钟频率相同的,将买入的放前面,卖出的放后面。)

\(\text{Submission}\)

\(\text{E: matrix}\)

解法一:

考虑 \(\text{dp}\)

我们定义 \(dp_{i,j}\) 表示前 \(i\) 行,在保证每一行的最小值为 \(1\) 的前提下,有 \(j\) 列的最小值是 \(1\)。另外,为了方便叙述,我们定义 \(m\) 为原题中的 \(k\)

对于初始值,显然有 \(dp_{0,0} = 1\)

接着我们考虑转移。首先顺着枚举状态中的 \(i,j\) ,然后枚举 \(k\) 表示这一行会新产生 \(k\) 列的最小值是 \(1\)

  • 对于 \(k = 0\),由于第 \(i\) 行必须有 \(1\),并且不能再新产生一列的最小值是 \(1\),所以只能在这最小值已经为 \(1\)\(j\) 列中,使得其中必须存在一个 \(1\)。计算的话,就是用乱选减去一个 \(1\) 都不选,及 \(dp_{i,j}=(m^j - (m-1)^j) \times dp_{i-1,j}\)

  • 对于剩余情况,显然这一行已经有 \(1\) 了,所以我们只需要考虑列的情况。显然,我们需要从 \(n - (j - k)\) (就是在上一行还没有产生这 \(k\) 列的状态) 选出 \(k\) 列来填补 \(1\),对于上一状态就已经最小值为 \(1\) 的列,显然是可以乱选的,也就是 \(m^{(j-k)}\),那么对于剩余的 \(n-j\) 列,只要不取 \(1\) 就可以了,也就是 \((m-1)^{n-j}\) 。总的来说,就是 \(dp_{i,j} = \sum _{k=1} ^ j dp_{i-1,j-k} \times C(n - j + k,k) \times m^{(j-k)} \times (m-1)^{n-j}\)

将两个部分的解加起来即可。

最后,直接输出 \(dp_{n,n}\) 即可。

总复杂度为 \(O(n^3 \log n)\)

解法二:

考虑容斥,枚举有 \(i\) 行,\(j\) 列的最小值不是 \(1\)

乱推一波式子,显然有 \(\sum_{i=1}^n \sum_{j=1}^n (-1)^{i+j} \times C(n,i) \times C(n,j) \times (k-1)^{(i+j)\times n-i\times j} \times (k-1)^{(n-i)\times (n-j)}\)

\(\text{Submission}\)

\(\text{F: virus}\)

这题应该是最有价值的了。

题意就是求逆序对个数的期望,不难发现,对于树上的一对点对 \((i,j),i>j\),那么显然最终的答案就是求 \(i\)\(j\) 先到的概率之和。

首先可以枚举根是谁

仔细思考可以发现,对于是 \(i\) 先还是 \(j\) 先到,他的概率只会与走到 \(\text{lca(i,j)}\) 之后的操作相关,也就是说,就是要求 \(i\)\(x\) 步到 \(lca(i,j)\)\(j\)\(y\) 步到 \(lca(i,j)\),要求 \(i\) 先到的概率。(显然,这个概率实际上只与 \(x,y\) 有关)

所以接下来考虑一个简单的递推。定义 \(f_{i,j}\) 表示 \(x\)\(i\) 步要走,\(y\)\(j\) 步要走,\(x\)\(y\) 先到的概率。(这个值已经说明过与 \(x,y\) 无关)

对于初始值,显然有 \(dp_{0,i}=1\)

如果你走的下一步并不能靠近 \(x\) 或者 \(y\),那么这一步显然对答案没有任何影响,我们就只需要考虑是靠近了 \(x\) 还是靠近了 \(y\),所以有 \(f_{i,j}=\dfrac{f_{i-1,j}+f_{i,j-1}}{2}\)

最后,对于每一个根,枚举 \((i,j)\),其产生的贡献就是 \(f_{{dep_i-dep_{lca(i,j)},{dep_j-dep_{lca(i,j)}}}}\) 之和。

时间复杂度 \(n^3\log n\)(因为 \(lca\) 需要复杂度,但是也可以优化)。

\(\text{Submission}\)

\(\text{What I learned:}\)

  • 对于一堆 \(i\) 对应一个 \(j\),如果有一些限制条件,使得其他的 \(i\) 不合法,且为了方便求解,我们需要把 \(i,j\) 合并在一起算,那么我们可以考虑排一个合适的顺序,使得 \(j\) 前面的 \(i\) 对他全部合法,这样更能方便求解。

  • 对于组合数学,一个很好的方式就是背包 \(DP\)

  • 对于树上 \(i,j\) 两个点的一些对比,是否只需要从他的 \(lca(i,j)\) 开始呢。

  • 考场上第五题文件名为 \(\text{martix}\) 但我拼的 \(\text{matrix}\) ,所以100分没了,出题人你真的英语就这么好吗。。下次复制吧。

posted @ 2024-03-04 15:10  Saltyfish6  阅读(4)  评论(0编辑  收藏  举报
Document