P2123 皇后游戏(贪心,邻项交换)
当做一个笔记吧。
我写的这篇文章说明了临项交换在最优排列问题中的正确性,所以可以放心考虑临项交换。我们的目标是设计一个满足严格弱序的 \(\text{cmp}\) 函数。
考察 \(x,y\) 分别在 \(i+1,i+2\) 位置的情况,不妨假设 \(x\) 在 \(y\) 前,\(s_i\) 表示 \(i\) 的前缀和,那么有:
\[c_y=\max\{\{c_i,s_i+a_x\}+b_x,s_i+a_x+a_y\}+b_y
\]
根据 \(\max\) 结合律吸进去:
\[c_y=\max\{c_i+b_x+b_y,s_i+a_x+b_x+b_y,s_i+a_x+a_y+b_y\}
\]
交换 \(x,y\) 只对后面两项造成影响,那么对后两项列出式子:
\[\max\{a_x+b_x+b_y,a_x+a_y+b_y\}< \max\{a_y+b_x+b_y,a_y+a_x+b_x\}
\]
\[a_x+b_y+\max (a_y,b_x)< a_y+b_x+\max(a_x,b_y)
\]
用 \(a_x+a_y+b_x+b_y\) 四项和减去上面的东西可以得到题解式子 \(\min(a_x,b_y)<\min(a_y,b_x)\)。
但是这个关系不满足不可比的传递性,所以考虑加入一些条件来加强性质。考虑在 \(\min(a_x,b_y)=\min(a_y,b_x)\) 的情况下,\(a_i\) 小的需要放前面(感性理解,前缀和会变小),那么我们以上面的条件作为第一个关键字,\(a_x\) 作为第二关键字排序。可以写个程序来验证正确性。
启示:对于最优排列问题,可以通过临项交换来得到一个可行的排序条件,再通过加强限制使它满足严格弱序。不过我现在遇到的大部分最优排列问题其实上都是找性质然后 DP……

浙公网安备 33010602011771号