「1.1」加工生产调度
题目描述
某工厂收到了 n 个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。
某个产品 i 在 A,B 两车间加工的时间分别为 Ai,Bi。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。
这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时间。输入格式
第一行仅—个数据 n ,表示产品的数量;
接下来 n 个数据是表示这 n 个产品在 A 车间加工各自所要的时间;
最后的 n 个数据是表示这 n 个产品在 B 车间加工各自所要的时间。输出格式
一行一个数据,表示最少的加工时间;
样例输入1
5
3 5 8 7 10
6 2 1 4 9样例输出1
34
注释说明
对于 100% 的数据,n≤1000
是贪心但问题的关键在于排序 bool cmp
两个产品都是在A加工的时间小于B加工的时间,优先加工A小的
比如 [3 ,5] [4, 6] ,优先加工A小的总时间为14, 反之为15
两个产品都是A加工时间大于等于B加工时间,优先选择B大的
比如[5, 3] [6, 4] , 优先选择B大的总时间为14, 反之为15
其余情况优先选择A加工时间小于B加工时间的
比如 [3, 5] [6, 4] ,优先选择A加工时间小于B加工时间的总时间为 13, 反之为 15
————————————————版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43738611/article/details/107460221
引用了一位大佬的解法并改正了其中小小的错误qwq
对这位佬表示感谢
#include<bits/stdc++.h>
using namespace std;
struct ed{
int at,bt;
}p[1005];
bool cmp(ed x,ed y){
if(x.at<x.bt&&y.at<y.bt){
return x.at<y.at;
}
if(x.at>=x.bt&&y.at>=y.bt){
return x.bt>y.bt;
}
else return x.at<x.bt;
}
int n,ta,tb;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&p[i].at );
for(int i=1;i<=n;i++){
scanf("%d",&p[i].bt );
}
sort(p+1,p+1+n,cmp);
for(int i=1;i<=n;i++){
ta+=p[i].at;
ta>tb ? tb=ta+p[i].bt :tb+=p[i].bt;
}
printf("%d",tb);
}
/*
5 3
1
2
5
6
2
*/
*********** 撒花 ***********