USACO 2020Jan Platinum 题解

T1 Cave Paintings

水在从下向上涨的时候可以看做是一些从不连通变为联通,因此可以等价为一种树形结构的填水方案。为什么是树而不是 DAG 呢?是因为两个同高度的块如果能联通到同一个更低高度的水格,那么它们就联通,应该缩成一个点。
维护一下连通性做树形 DP 即可。
代码

T2 Non-Decreasing Subsequences

朴素 DP 即为每次将 a i \le a_i 的位置的方案数加到 a i a_i 上。设其中第 i i 个位置产生的转移是 a M i aM_i ,则答案可表示为 ( 1 , 0 , , 0 ) M l M l + 1 M r ( 1 , 1 , , 1 ) T (1, 0, \dots , 0) M_lM_{l+1}\cdots M_r (1,1,\dots,1)^\mathsf T ,考虑预处理 ( 1 , , 0 ) M k 1 M 1 1 (1, \dots, 0) M_k^{-1} \cdots M_1^{-1} M 1 M k ( 1 , , 1 ) T M_1 \cdots M_k (1, \dots, 1)^\mathsf T 即可。
注意到本题中的 M M 是稀疏的,只有 Θ ( k ) \Theta(k) 个位置有值,因此它和一个矩阵的乘法复杂度是 Θ ( k 2 ) \Theta(k^2)
时间复杂度 Θ ( n k 2 + q k ) \Theta(nk^2 + qk) 。(事实上可以做到 Θ ( n k log k + q k ) \Theta(nk\log k + qk) ,但是在本题的数据范围下可能没有什么意义)
代码

T3 Falling Portals

如果一头年想走到 y y 比它大的传送门,那就要尽量换乘 x x 较小的传送门以更快地接近,否则就要尽量换乘 x x 尽量大的。

按照 y y 排序一个个加入,用栈维护一个折线然后在上面二分即可得到相遇时间,正反两边就可以处理出两种情况的答案。时间复杂度 Θ ( n log n ) \Theta(n\log n)
代码

猜你喜欢

转载自blog.csdn.net/EI_Captain/article/details/104056100