Mowing Mischief P 题解
非常综合的一道 dp 好题。
先对 \(x\) 排序。
首先可以想到这题的关键的是最大的 \(S\) ,其次是最小的面积。所以这个长度就是最长上升子序列的长度,所选的 \(S\) 也必须是一个 LIS ,像这样选一个 LIS 的题目可以对数据分层,\(f_i\) 是 \(i\) 为右端点的最长上升子序列,将相同的 \(f\) 放在一层里。对于一层我们只能选择一个数。当然一层里的 \(x\) 递减,\(y\) 递增。令$p_i $ 为 \(i\) 所在的层数。
令 \(dp_i\) 为 \(i\) 这个点为最后一个点与前面结合的最小面积,且这些点必须有 \(f_i\) 个,即每一层选一个。
容易的,可以写出方程 \(dp_i=dp_j+(x_i-x_j)\times(y_i-y_j),j\in p_{i-1},x_j\le x_i,y_i\le y_j\)。
发现在 \(i\) 的转移区间在 \(p_{i-1}\) 这一层的一段连续区间里。这个区间可以用二分来求出。
而通过打表分析可得,\((x_i-x_j)\times(y_i-y_j)\) 符合四边形不等式,所以转移具有决策单调性。
这里可以通过线段树分治将这一段区间都挂上 \(i\) 这个点,这样在线段树上的每一个点都有一定的点需要去转移。这样就可以在线段树的每一个点都进行分治来快速求得答案。时间复杂度 \(O(n\log^2n)\)。

浙公网安备 33010602011771号