题意:有n个老司机,n个下午路线和n个夜间路线,给每个老司机安排一个下午路线和夜间路线,使得每个路线恰好被分配到一个老司机,且需要支付给老司机的总加班费尽量少。如果一个司机的行驶总时间不超过d,则没有加班费,否则超过的部分每小时需要支付r块的加班费。
分析:简单贪心,排序后首尾相加一定是最优的组合。
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n,d,r,ans,a[101],b[101];
int main()
{
cin.sync_with_stdio(false);
while(cin>>n>>d>>r && n && d && r)
{
for(int i = 1;i <= n;i++) cin>>a[i];
for(int i = 1;i <= n;i++) cin>>b[i];
sort(a+1,a+1+n);
sort(b+1,b+1+n);
ans = 0;
for(int i = 1;i <= n;i++) ans += max(a[i]+b[n-i+1]-d,0)*r;
cout<<ans<<endl;
}
}