站外题求助!(贪心、排序)
  • 板块题目总版
  • 楼主carlxj
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/22 22:18
  • 上次更新2024/4/23 15:28:02
查看原帖
站外题求助!(贪心、排序)
1162702
carlxj楼主2024/4/22 22:18

题目描述

司机排班
描述

镜湖公交公司有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;
}

求大神解答

2024/4/22 22:18
加载中...