区间问题解析(持续更新)
这几天刷了一下久未碰过的DP其实是太蒟蒻不敢碰,做了几道类似的区间问题。
区间覆盖问题
这类问题通常是给出多条线段,再给出一个目标区间,求最少选多少条线段可以覆盖目标区间(如下图所示) 这类问题有DP做法也有贪心做法。但暂时只会贪心做法。
具体做法
首先,对所有区间按左端点从小到大排序。 接着,从左到右枚举一边线段,在所有可以覆盖当前目标区间(注意,不是最终目标区间),则取右端点最大的一条,选择条数加一,并用其右端点更新当前目标区间的起点,当可以完全覆盖最终目标区间时,输出结果。
P1514 引水入城
这道题可以先爆搜,确定每个供水的城市,能给多少个城市供水,可以发现,最后的结果是一条线段,搜完后对线段排序,按上面的思路寻找能覆盖所有沙漠城市的最小区间覆盖就OK了
区间合并问题
这类问题是先给出一些区间,问合并所有区间后的不相交的区间个数。
具体做法
同样是对所有区间先按左端点从小到大排序,然后,对于一个区间,若其与前面已合并的区间相交且右端点大于已合并区间的右端点,那也将其合并如此区间,更新已合并区间的右端点;若不相交,区间数加一,且以当前区间作为下一轮的已合并区间
P2434 区间
模板题,不解释,按照上面的流程做就OK,只是要多开一个数组存所有合并后的区间
对于区间合并问题,还有一些变式例如求合并后的区间大小,这一类也只用在合并时注意储存对应的变量就行了,再此不过多赘述