题目大意:有 n 个司机。n 条下午路线和n条晚上路线,先在要给每一个司机安排一条下午路线和一条晚上路线。假设司机的工作时间超过 d,则要依照每小时 r 元添加加班费。问最少需支付多少加班费。
解题思路:贪心。下午最大的搭配晚上最小的,一次类推。
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int n, d, r;
while (scanf("%d%d%d", &n, &d, &r) && n + d + r) {
int M[110], E[110];
for (int i = 0; i < n; i++)
scanf("%d", &M[i]);
for (int i = 0; i < n; i++)
scanf("%d", &E[i]);
sort(M, M + n);
sort(E, E + n);
int ans = 0;
for (int i = 0; i < n; i++)
if (M[i] + E[n-i-1] > d)
ans += (M[i] + E[n-i-1] - d) * r;
printf("%d
", ans);
}
return 0;
}