题目描述
司机排班
描述
镜湖公交公司有n个司机、公司经营n个白天路线和n个夜间路线。现在需要给每个司机安排一个白天路线和一个夜间路线,如果一个司机的行驶总时间(白天路线+夜间路线)不超过d,则没有加班费;否则超出部分每单位时间支付r元加班费。现在想请你编程计算如何分配使得每条路线恰好被分配给一个司机,且需要支付给司机的总加班费用最少。
输入
多组数据
第一行为三个整数n,d,r,1<=n<=100,1<=d<=10000,1<=r<=5
第二行n个整数,表示下午路线的行驶时间
第三行n个整数,表示夜间路线的行驶时间
行驶时间均不超过10000
输出
输出最小加班总费用
输入样例 1
2 20 5
10 15
10 15
2 20 5
10 10
10 10
输出样例 1
50
0
我随便写的代码(部分正确)
#include<bits/stdc++.h>
using namespace std;
int n,d,r,a[100001],b[100001],c[100001],s,t=2;
int main()
{
while(t--)
{
for(int i=1;i<=100000;i++)
{
a[i]=0;
b[i]=0;
c[i]=0;
}
s=0;
cin>>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+n+1);
sort(b+1,b+n+1);
for(int i=1;i<=n;i++)
{
c[i]=a[i]+b[i];
if(c[i]>d) s+=(c[i]-d)*r;
}
cout<<s<<endl;
}
return 0;
}
求大神解答