您的位置:首页 > 其它

ACM: uva 11389 -&…

2016-05-19 23:28 323 查看
The Bus Driver Problem
In a city there
are n bus drivers. Also
there are n morning bus
routes
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 hours at a
flat 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 nand r,
as described above. In the second line, there
are space separated
integers which are the lengths of the morning routes given in
meters. Similarly the third line
has 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

2 20 5

10 15

10 15

2 20 5

10 10

10 10

0 0 0

 

sample outputs

50

0

 

题意: 给每位司机分配一个白天和晚上的行车路线, 每个路线时间给出, 并且如果司机工作时间为d,

     
超过时间d就算是加班工作, 每一小时就按照r工资计算, 现在要你安排使得最小的加班费用.

 

解题思路:

    
1. 问题很简单, 大小配即可.

 

代码:

#include <cstdio>

#include <iostream>

#include <cstring>

#include <algorithm>

using namespace std;

#define MAX 105

int n, d, r;

int a[MAX], b[MAX];

bool cmp(int a, int b)

{

 return a > b;

}

inline int max(int a, int b)

{

 return a > b ? a : b;

}

int main()

{

// freopen("input.txt", "r", stdin);

 int i;

 while(scanf("%d %d %d", &n,
&d, &r) != EOF)

 {

  if(n == 0
&& d == 0
&& r == 0) break;

  for(i = 0; i <
n; ++i)

   scanf("%d",
&a[i]);

  for(i = 0; i <
n; ++i)

   scanf("%d",
&b[i]);

  sort(a, a+n);

  sort(b, b+n, cmp);

  

  int ans = 0;

  for(i = 0; i <
n; ++i)

   ans += max(0,
(a[i]+b[i]-d));

  printf("%d\n", ans*r);

 }

 return 0;

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: