题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28436
首先,直观的感受是:
每一个任务的交待时间是不可避免的,而且每一个交待时间后面都跟着一个执行时间。最后的总时间一定是全部交待时间之和加上某一个任务所带来的部分执行时间。
既然交待时间是不可避免的,那就只好让那个多出来的执行时间尽量减少——尽量充分利用执行时间,尽量在别人执行任务的时候交待任务!
所以,可以用贪心策略来解决:最长执行时间的任务优先!
《训练指南》中有给出证明(Page 4),这里也简单提一下:
假设现在存在一个任务序列了,假设这个任务中至少存在两个任务T1, T2不满足最长执行时间优先性质,即 J1 < J2, 且交待时间记作B, 执行时间记作J,则
case 1: 当J2 >= B1+J1,通过画图可以看出,你会发现交换任务T1, T2,两个任务的总耗时并没有改变, 所以把执行时间长的交换到前面去不会使得效果更差。
case 2: 当 J2 < B1+J1,如果先执行T1,总耗时为B1+B2+J2; 若先执行T2,那么总耗时为B2+B1+J1
又因为J1 < J2, 所以让执行时间更长的T2优先于T1执行会更加有利。