问题:市中有n个司机,有n个早班路线和晚班路线。每个司机分配一个早班和晚班路线,如果一个司机的总行程路线超过d,超过的部分按每小时r元计算。问最小的加班费多少。
思路:贪心算法。
先以两个情况为例。早班路线用m1,m2表示,晚班路线用a1,a2表示。分别从小到大排列。
1、m1+a1,m2+a2小于d,此时任意安排都可以
2、m1+a1,m2+a2都大于d,此时任意安排都可以。
3、m1+a1<d,m2+a2>d,此时(m1+a2-d)+(m2+a1-d)-(m2+a2-d)=m1+a1-d<0。
综合上述情况,两种情况时,将早班的最小值与晚班的最大值,早班的最大值与晚班的最小值匹配时,加班费是少。
根据两种情况可以推广到三种及更多情况
具体代码参考:
https://github.com/wuli2496/OJ/tree/master/UVa/11389%20The%20Bus%20Driver%20Problem