这个题算很水的一个贪心题吧,题目大意是说有n个司机,有n个下午路线和n个夜间路线,现在要求你给司机进行安排白天和晚上的工作(每个下午路线和夜间路线可能不同),若司机白天加上夜晚的工作量大于d,则需要支付超过部分乘以r的加班费用,现在要求你安排使得没跳路线恰好被分配到一个司机,并且使得需要支付的加班费用最少。
解法:排序,白天从大值去,夜间从小值取进行计算即可。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=10001;
int n,d,r,a[maxn],b[maxn];
int main()
{
while(scanf("%d%d%d",&n,&d,&r)&&n)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
scanf("%d",&b[i]);
sort(a,a+n);
sort(b,b+n);
int ans=0;
for(int i=0;i<n;i++)
{
if(a[i]+b[n-1-i]>d)
ans+=(a[i]+b[n-1-i]-d)*r;
}
printf("%d\n",ans);
}
return 0;
}