The Bus Driver Problem

本博客介绍了一个关于司机工作时长的优化问题,目的是通过合理分配行驶路线来减少加班费用。通过将所有上午和下午行驶路线时长排序,并选择一对时长最接近总工作时长d的路线进行匹配,从而计算出最小的加班费用。

题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=23710

题目大意:

     n个司机,设定每位司机上午下午各有一条行驶路线,现给出n条上午行驶路线时长和n条下午行驶路线时长,规定的工作时长为d小时,如果司机工作时长超过d小时,则超出的时间按每小时r塔卡(孟加拉国货币单位)计算加班费用,问:分配行驶路线后老板支付的加班费用最少为多少?

题目分析:

     要使加班费用最少,需要让每位司机尽量工作时间靠近d小时,则安排路线只需要安排一条长行驶路线时长和一条短行驶路线时长即可。求出最少的加班时长,再乘上超时的单价即可。

源代码:

 

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int m=100;
 5 int main()
 6 {
 7     int n,d,r,i,j,min,count,a[m],b[m];
 8     while(cin>>n>>d>>r&&n&&d&&r)
 9     {  
10         min=0;
11         count=0;
12         for(i=0;i<n;i++)
13             cin>>a[i];//输入给出的上午路线时长
14         for(j=0;j<n;j++) 
15             cin>>b[j];//输入给出的下午路线时长
16         sort(a,a+n);//排序
17         sort(b,b+n);//排序
18         for(i=0,j=n-1;i<n,j>=0;i++,j--)
19             if(a[i]+b[j]>d)
20               count+=a[i]+b[j]-d;//计算加班时长
21         min=r*count;//计算最小加班费用
22         cout<<min<<endl;
23     }
24     return 0;
25 }

 

转载于:https://www.cnblogs.com/huaszjh/p/4655479.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值