问题链接:Problem H
问题简述:
早上有n个任务,晚上有n个任务,每个任务有对应的工作时间,超过特点的工作时间后需要额外付加班费,问如何给每个司机分配一个早上的任务与晚上的任务,而使加班费最少?
问题分析:
贪心思想,花费最长时间的匹配花费最短时间的,次长的匹配次短的,以此类推便可。
AC通过的C++语言程序如下:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<set>
#include<cstring>
#include<cmath>
#include<map>
#define N 200005
using namespace std;
int mor[105],nit[105];
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,d,r;
while(~scanf("%d%d%d",&n,&d,&r)&&n&&d&&r){
for(int i=0;i<n;i++)
scanf("%d",&mor[i]);
for(int i=0;i<n;i++)
scanf("%d",&nit[i]);
int ans=0;
sort(mor,mor+n);
sort(nit,nit+n,cmp);
for(int i=0;i<n;i++){
int t=max(0,(mor[i]+nit[i]-d)*r);
ans+=t;
}
printf("%d\n",ans);
}
}