UVa1467 Installations(贪心)

问题:已经n安装任务,知道每个任务完成所需时间serveTime及截止时间deadline,任务的惩罚时间定义为完成时间减去截止时间,要求最大惩罚时间和次在惩罚时间之和最小。

思路:使用贪心算法,将n个任务按照截止时间从小到大排列,如果截止时间相同,根据任务完成所需时间排列。此时的最大惩罚时间最小。此时最大处罚时间和次大处罚时间之和可能不时最大。在排序后,记录下此时的前两个最大的位置,记为p1,p2.分下面几种情况考虑。

1、在p1之前的任意两个互换,因为此时p1,p2位置的两处惩罚值不变,而互换后0到p1之间计算的值可能会大于p1时的值,结果可能会大于等于p1处的惩罚值,最后的惩罚值之和会变大。

2、p2之后的任意两个互换,与上面一样,惩罚值可能会变大。

3、p1之前的与p1、p2之间互换。会使p1变大,p2没有变。最终是变大。

4、p2之后的与p1、p2之间互换,与上面一样,最终是变大。

5、[0,p1]与p2之后的位置互换,将[0,p1]移到p2的后一个是最优的。因为将[0,p1]中的一个移动到p2之后的任意位置,相当于先移动到p2的后一个后,再与p2后的任意位置作互换。

具体代码参考:

https://github.com/wuli2496/OJ/tree/master/UVa/1467%20Installations

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值