区间相关问题(贪心)

摘自紫书第八章

突破口一般是区间包含的时候怎么选, 以及怎么排序

(1)选择不相交区间

问题: 有n个开区间(ai, bi) 选择尽量多的区间, 使这些区间两两没有公共点。

 

按照b从小到大排序(这种情况a无所谓, 得出结果一样)

 

一定选第一个区间, 然后, 把所有和区间1相交的区间排除在外, 然后不相交就选下一个, 然后同理。

 

所以就记录区间编号, 扫一遍就ok。

 

(2)区间选点

问题: 数轴上有n个闭区间 [ai, bi]。取尽量少的点, 使每个区间都至少有一个点。

 

按照b从小到大, b同时a从大到小, 每次都取第一个区间的最后一点, 这个点不能覆盖的时候

 

就再取下一个区间的最后一个点, 以此类推。

 

(3) 区间覆盖

数轴上有n个闭区间 [ai, bi], 选尽量少的区间覆盖一条指定线段[s,t]。

 

预处理, 在[s,t] 外面的部分切掉(因为起不到任何作用)

 

按照a从小到大排序, 区间1起点不是s无解。否则选择起点在s的最长区间

 

然后新的起点就是刚才选的区间的终点bi, 然后忽略bi之前的部分, 继续做

 

posted @ 2018-05-07 17:06  Sugewud  阅读(226)  评论(0编辑  收藏  举报