Luogu5896 [IOI2016] aliens
题意 : 有一个
现在可以操作
是正方形
主对角线是原矩阵主对角线的子集
需要保证每个关键位置至少被覆盖一次,且最小化至少被覆盖一次的格子数目。
首先不难发现,某个关键位置根据主对角线翻转后是等效的。于是我们将所有
接下来又能发现,若对于
于是,我们保留了关键点的“上包络线”,如图 :
由此又能简化决策 : 若一组覆盖矩形中,有某个矩形的边界不穿过(卡在)任何一个关键点,则可以往回缩得到更优秀的解。
接下来开始
枚举连续一段行
则有转移:
根据上包络线的性质,当
于是新覆盖的位置可以这样计算 :
记
先算出
于是,需要新加入的矩阵的边长即为
新覆盖的面积即为
同时注意到由上包络线的性质,
于是记
本着 “
然后就是个
复杂度