2025.2.16 闲话2:小技巧#2
分治恶心题:P7482 不条理狂诗曲。
当 \(\max\) 等函数中有多个变量不好变形时,尝试将一些变量压到一起。
例如本题简化方程:
\[\max(fl_{1,i}+fr_{0,j},fl_{0,i}+fr_{0,j},fl_{0,i}+fr_{1,j})
\]
其中可以将第一二项压在一起变成:\(\max(fl_{1,i},fl_{0,i})+fr_{0,j}\)。
然后修改状态表示,令一个新的量 \(fl'_{1,i}=\max(fl_{1,i},fl_{0,i})\)。
最后你就可以得到一个美观且易于变形的方程了:
\[\max(fl'_{1,i}+fr_{0,j},fl_{0,i}+fr_{1,j})
\]
这里的变形技巧也很巧妙。上面的 \(\max\) 式子无法直接使用,这个时候可以分类讨论。以取左侧为例,这个式子的值为(省略 \('\) 符号)\(fl'{1,i}+fr_{0,j}\) 当且仅当:
\[fl_{1,i}+fr_{0,j} \ge fl_{0,i}+fr_{1,j}
\]
移项:
\[fl_{1,i}-fl_{0,i} \ge fr_{1,j}-fr_{0,j}
\]
然后令 \(s(x)=fl_{1,x}-fl_{0,x}\),上式即为:\(s(i) \ge s(j)\)。至于取 \(fl_{0,i}+fr_{1,j}\),不等式倒过来即可(等号不要算重)。
保证不重不漏以后,就可以排序用双指针做了。
另外还要注意,在计算过程中一定要搞清楚方程中量的具体含义和求取要求,这道题将 \(fl\) 和 \(fr\) 压在一起都要开四个数组,再两两取最大值合并后才能达到前面不等式里的形式。
本文采用 「CC-BY-NC 4.0」 创作共享协议,转载请注明作者及出处,禁止商业使用。
作者:Jerrycyx,原文链接:https://www.cnblogs.com/jerrycyx/p/18755638
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步