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\) 的方案数
最终的答案就是 \(\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}\)
不难发现
本质上任意一个上升子序列都可以贡献 \(1\)
所以是上升子序列计数
总结
二维偏序通过排序一维直观化问题

浙公网安备 33010602011771号