题目大意
Bessie的表妹Ella和Bella正在参观农场。不幸的是,自从他们到达以来,他们一直在恶作剧。
在他们的最新计划中,他们决定尽可能多地割草。农场的草地是 T×T 的正方形。左下角是 (0,0) ,右上角是 (T,T) 。因此,正方形包含 (T+1)2 个格点(具有整数坐标的点)。
Ella和Bella计划从 (0,0) 开始并以每秒一个单位长度的速度运行到 (T,T) ,同时每只奶牛都握住非常锋利且非常有弹性的线的一端。任何被这根电线扫过的区域的草都会被切断。Ella和Bella可能采取不同的路径,但她们只会向上或者向右移动,从一个格点移动到另一个格点。
Bessie非常担心会切割太多的草,所以她发明了一个聪明的计划来限制Ella和Bella的路径。在整个草原上散布着 N 种花(1≤N≤2e5),每种花都在一个特定的格点上。 Bessie将从这些花中挑选一个子集 S , S 集合中的花Ella和Bella都需要经过(Ella和Bella的路径都必须经过 S 中的所有花朵)。
Ella和Bella将会切割面积尽可能大的草,请帮助Bessie确定集合 SS 使得在 SS集合尽可能大的情况下被切割的草的面积最小。
题目分析
经过思考,我们发现骑士拉着线扫对Ella和Bella来说最优的情况就是划出一个矩形。
所以,问题变成了在 N 个点中选择某些点,排序后一一构成矩形(相邻的点),求构成的这些矩形的最小面积和。
将所有点按照其横坐标为第一关键字,纵坐标为第二关键字排序,靠前的点无法转移到靠后的点。用树状数组进行动态规划,我们可以得到以每个点为结尾的选取序列的最优长度。(相当于求以每个点结尾的LIS)并根据LIS的大小对点进行分层。
可以得出属于同一层的点横坐标递增,纵坐标递减。
接下来,我们只需要考虑层与层之间的转移。(本层点的LIS一定是由上一层点的LIS转移过来的)
转移方程如下:
dpi =Minj (j为上一层点 且 xj≤xi, yj≤yi) {dpj + (xi−xj) ∗ (yi−yj) }
把后一项拆开,得:
dpi =Minj (j为上一层点 且 xj≤xi, yj≤yi) {dpj + xjyj − xiyj