标签:
Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu
Description
II U C ONLINE C ON TEST 2 008 |
|
The Bus Driver Problem |
|
Input: standard input Output: standard output |
|
|
|
In a city there are n bus drivers. Also there are n morning bus routes & n afternoon bus routes with various lengths. Each driver is assigned one morning route & one evening route. For any driver, if his total route length for a day exceeds d, he has to be paid overtime for every hour after the first d hours at a flat r taka / hour. Your task is to assign one morning route & one evening route to each bus driver so that the total overtime amount that the authority has to pay is minimized.
|
|
Input |
|
The first line of each test case has three integers n, d and r, as described above. In the second line, there are n space separated integers which are the lengths of the morning routes given in meters. Similarly the third line has n space separated integers denoting the evening route lengths. The lengths are positive integers less than or equal to 10000. The end of input is denoted by a case with three 0 s.
|
|
Output |
|
For each test case, print the minimum possible overtime amount that the authority must pay.
|
|
Constraints |
|
- 1 ≤ n ≤ 100 - 1 ≤ d ≤ 10000 - 1 ≤ r ≤ 5
|
|
Sample Input |
Output for Sample Input |
2 20 5 10 15 10 15 2 20 5 10 10 10 10 0 0 0 |
50 0 |
|
|
|
题解:本题是解决实际问题,有n个上午的任务和下午的任务,分配给司机,如果工作总时间超过d,超过的部分要给加班费;
现在让你安排任务,问最小的加班分花费。
分析:贪心问题。将两个任务分别按递增和递减序排序,每个对应边号的一组即可。
设序列中的两组配对的元素为m1,a1,m2,a2 且 m1≤m2,a1≤a2;
则配对方式<m1,a2>,<m2,a1>优于<m1,a1>,<m2,a2>
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int i,x,y,z,a[10],b[10];
while(cin>>x>>y>>z&&x&&y&&z)
{
int s=0;//每次都要归0
for(i=1;i<=x;i++)
{
in>>a[i];
}
for(i=1;i<=x;i++)
{
cin>>b[i];
}
sort(a,a+x);
sort(b,b+x);
for(i=1;i<=x;i++)
{
if(a[i]+b[x+1-i]>y)
{
s=(a[i]+b[x-i+1]-y)*z;
s+=s;
}
}
cout<<s<<endl;
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/hfc-xx/p/4654037.html