The Bus Driver Problem

题目链接: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 }

 

posted @ 2015-07-17 19:25  ~瞬间*  阅读(160)  评论(0编辑  收藏  举报