「1.1」加工生产调度

发布于:2024-08-16 ⋅ 阅读:(138) ⋅ 点赞:(0)

 

「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
*/

*********** 撒花 ***********


网站公告

今日签到

点亮在社区的每一天
去签到