解决一类极大子矩形问题(悬线法)

来源:互联网 发布:共有计价软件下载 编辑:程序博客网 时间:2024/06/07 01:10

(以下内容参考王知昆国家集训队论文)

最大子矩形问题

在一个给定的矩形网格中有一些障碍点,要找出网格内部不包含任何障碍点,且边界与坐标轴平行的最大子矩形。

两种算法

1.枚举左端点,不断限制上下长度。
2.悬线法。每个点都向其上方第一个障碍点连线,dp出左右最大距离。

第一种算法复杂度为O(S2),S为点集大小。
第二种算法复杂度为O(nm),即地图大小。

(1)奶牛浴场
John 要在矩形牛场中建造一个大型浴场,但是这个大型浴场不能包含任何一个奶牛的产奶点,但产奶点可以出在浴场的边界上。John 的牛场和规划的浴场都是矩形,浴场要完全位于牛场之内,并且浴场的轮廓要与牛场的轮廓平行或者重合。要求所求浴场的面积尽可能大。 L,W30000,S5000

第一种算法直接秒过了。。Code:http://paste.ubuntu.com/25978156/
悬线法有点难写。。(而且被卡常)
注意的是离散化之后悬线上下都在边缘的无法处理,这个之后再排序扫一遍即可。
Code:http://paste.ubuntu.com/25979343/

(2)[OIBH]Candy Box(原题目已经找不到了,可以拿下面贴出标程去对拍(注意输入格式),网上的程序大多有问题被我Hack掉了)
一个被分为 n*m个格子的糖果盒,第 i 行第 j 列位置的格子里面有a[i][j]颗糖。本来tenshi打算送这盒糖果给某 PPMM 的,但是就在要送出糖果盒的前一天晚上,一只极其可恶的老鼠夜袭糖果盒,有部分格子被洗劫并且穿了洞。tenshi 必须尽快从这个糖果盒里面切割出一个矩形糖果盒,新的糖果盒不能有洞,并且 tenshi 希望保留在新糖果盒内的糖的总数尽量多。

悬线法裸题。Code:http://paste.ubuntu.com/25978340/
这种点不能在边缘的悬线就比上一道题好写多了。。
附上一道类似题目的链接:
BZOJ3039: 玉蟾宫

阅读全文
0 0