此题贪心可做。
但是我有一种和网上一些题解不同的思路虽然还没实现但记录下来改日想写是再实现
首先我们可以计算出每个工程能开始的区间为0到t2-t1;那么这些区间在刚开始都是有重叠的。。我们就选时间最短的做这样对于刚开始来说一定是最优的,做后现在时间是p1
那么在大于p1的时间后我们又看有哪些区间有重合(显然对于t2-t1<=p的那些区间我们不用考虑了只考虑t2-t1>p的那些区间)这样在需要考虑的区间当中我们有选时间最短的
。。。。这样一直下去直到无法再做;
具体实现可用一个二分和后缀。。后缀存储从某时间点后开始的最优工程需要做的时间(所谓最优工程就是这个时间点以及这个时间点以后能做的工程中需要时间最短的工程
不过我感觉popoQQQ的调整法也很棒。。他先是以结束时间排序(从小到大)这样能保证所有工程都能考虑到然后用堆来对已经选过的工程进行调整具体可百度
我觉得他的灵感是从这组数据来的:
10 10
10 20
2 21
2 21
2 21
这样如果我们不调整就只能选2个但用堆维护后可以选4个(堆是使用时间最长结束时间最短的在顶)