题目大意:有n个司机,n条下午路线和n条夜间路线,给每个司机安排一个下午路线和一个夜间路线,使得每条路线恰好被分配到一个司机,且需要支付给司机的总加班费最少,如果一个司机的行驶总时间不超过d,则没有加班费,超出的部分每小时需要支付r元的加班费,求最小的加班费
解题思路:用最大的夜间时间+最小的下午时间
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 110
int n, d, r;
int morning[maxn], evening[maxn];
int main() {
while(scanf("%d%d%d",&n, &d, &r) == 3 && n + d + r) {
for(int i = 0; i < n; i++)
scanf("%d",&morning[i]);
for(int i = 0; i < n; i++)
scanf("%d",&evening[i]);
sort(morning,morning+n);
sort(evening,evening+n);
int ans = 0;
for(int i = 0; i < n; i++)
if(morning[i] + evening[n-i-1] > d)
ans += morning[i] + evening[n-i-1] - d;
printf("%d\n",ans*r);
}
return 0;
}