bzoj1029

此题贪心可做。

但是我有一种和网上一些题解不同的思路虽然还没实现但记录下来改日想写是再实现

首先我们可以计算出每个工程能开始的区间为0到t2-t1;那么这些区间在刚开始都是有重叠的。。我们就选时间最短的做这样对于刚开始来说一定是最优的,做后现在时间是p1

那么在大于p1的时间后我们又看有哪些区间有重合(显然对于t2-t1<=p的那些区间我们不用考虑了只考虑t2-t1>p的那些区间)这样在需要考虑的区间当中我们有选时间最短的

。。。。这样一直下去直到无法再做;

具体实现可用一个二分和后缀。。后缀存储从某时间点后开始的最优工程需要做的时间(所谓最优工程就是这个时间点以及这个时间点以后能做的工程中需要时间最短的工程

不过我感觉popoQQQ的调整法也很棒。。他先是以结束时间排序(从小到大)这样能保证所有工程都能考虑到然后用堆来对已经选过的工程进行调整具体可百度

我觉得他的灵感是从这组数据来的:

10 10

10 20

2 21

2 21

2 21

这样如果我们不调整就只能选2个但用堆维护后可以选4个(堆是使用时间最长结束时间最短的在顶)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值