Loading

6.3 CW 模拟赛 T3. 被djq加0了

前言

保证利用率的情况下注意时间观念
缓慢耐心和糊里糊涂完全是不同的概念

\(\textrm{note:}\) 这题可以用图论建模的方法转化 \(\rm{dp}\) \(\to\) 上升子序列数量

思路

首先考虑 \(q\) 确定时, \(f(p, q)\) 的解

考虑直接处理是困难的, 不妨从 \(s\) 的合法性入手
考虑位置 \(i, j\) 上的约束

  • \(p_i < p_j, q_i < q_j\)
    此时没有任何约束
  • \(p_i < p_j, q_i > q_j\)
    此时如果 \(s_i = 0\), 没有约束
    如果 \(s_i = 1\), 则 \(s_j = 1\)
  • \(p_i > p_j, q_i < q_j\)
    此时如果 \(s_i = 1\), 没有约束
    如果 \(s_i = 0\), 则 \(s_j = 0\)
  • \(p_i > p_j, q_i > q_j\)
    此时没有任何约束

关键一步: 按照 \(p\)\(q\) 整体排序
此时上述偏序问题转化为了数轴上的问题, 会直观很多


讨论排序之后位置 \(i, j\) 的约束关系
对于任意一对 \(\{q_i, q_j\}\), 其中 \(i < j, q_i > q_j\), 有

  • 如果 \(s_i = 1\), 则 \(s_j = 1\)
  • 如果 \(s_j = 0\), 则 \(s_i = 0\)

注意到这个条件是充要的, 换句话说就是我们把问题转化成了对这个条件的构造方案数

对于一个逆序对, 只存在 \(\{1, 1\}, \{0, 0\}, \{0, 1\}\) 三种情况

发现这个东西可以简单的用 \(\rm{dp}\) 计算方案数
不妨令 \(g_{i, j}\) 表示考虑到位置 \(i\), 现在已经确定 \(> j\) 的位置对应的 \(s\) 强制为 \(0\) 的方案数

\[ \begin{align*} \begin{cases} g_{i, j} \to g_{i - 1, j} & q_{i - 1} > j \\ \begin{cases} g_{i, j} \to g_{i - 1, q_{i - 1}} \\ g_{i, j} \to g_{i - 1, j} \end{cases} & \text{otherwise.} \end{cases} \end{align*} \]

最终的答案就是 \(\sum g_{1, \boxed{}}\)

尝试一下这 \(30 \%\), 事实证明是对的


发现这个转移事实上是在求上升子序列个数
引入 \(q\) 的不确定性

\(dp_{i, j, k}\) 表示位置 \(i\) 结尾, 用了 \(j\) 个未知位置, 钦定 \(q_i = k\) 的上升子序列个数

  • 如果 \(q_i\) 已知
    那么简单处理 \(dp_{i', j, k'} \to dp_{i, j, q_i}\) 即可, 其中 \(i' < i, k' < q_i\)
  • 如果 \(q_i\) 未知
    此时不难发现我们可以从 \(dp_{i', j - 1, k'} \to dp_{i, j, k}\), 其中 \(i' < i, k' < k\)

    为什么此时不用考虑未知位置上放重复的问题呢?
    因为此时在 \(i\) 位置上放了 \(k\), 如果之前有放过 \(k\) 的状态, 是不会影响到的
    正常一点来讲就是任意一个上升子序列中不存在重复数字
    注意最后统计答案要乘上任意排列剩下未使用的未知位置的方案数

需要二维前缀和优化 \(\rm{dp}\)


其实我对这个做法不是很满意
我们继续考虑最初的那个 \(\rm{dp}\)

不难发现

\[g_{i, j} \gets g_{i + 1, j} + [j = q_i] \times \sum_{k = j + 1}^{n} g_{i + 1, k} \]

本质上任意一个上升子序列都可以贡献 \(1\)
所以是上升子序列计数

总结

二维偏序通过排序一维直观化问题

posted @ 2025-06-16 18:48  Yorg  阅读(13)  评论(0)    收藏  举报