1425. 加工生产调度

1425:【例题4】加工生产调度 信息学奥赛一本通 贪心算法 这段代码通过遍历加工顺序,逐步累加每个产品在 A 车间和 B 车间的加工时间,确保每个产品在 A 车间加工完毕后才能进入 B 车间,从而计算出总的加工时间。 阅读详情
信息学奥赛一本通 贪心算法 

【题目描述】

某工厂收到了 n个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。

某个产品 i在 A,B 两车间加工的时间分别为Ai,Bi𝐴𝑖,𝐵𝑖。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。

这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时间。

【输入】

第一行仅—个数据 n ,表示产品的数量;

接下来 n 个数据是表示这 n个产品在 A 车间加工各自所要的时间;

最后的 n个数据是表示这 n 个产品在 B 车间加工各自所要的时间。

【输出】

第一行一个数据,表示最少的加工时间;

第二行是一种最小加工时间的加工顺序。

【输入样例】

5
3 5 8 7 10
6 2 1 4 9

【输出样例】

34
1 5 4 2 3

【提示】

对于100%的数据, 0 < n < 10000,所有数值皆为整数。

【分析】

根据样例答案,可以看出是按b降序排列,然后把a中最少的放前面,尝试写出来后在一本通网站上测评有一个数据过不掉。

查询网络得知,不仅要考虑按b降序排列,还要考虑按a升序排列,怎么解决这个矛盾呢?首先找出a,b中最小值,根据最小值升序,然后依次看最小值等于a还是等于b,等于a的在队列左边,等于b的在队列右边,这样依次重新安排好位置。借用大 聪 明博主的图片来说明,会比较清晰。

图片来源

//按照a升序,b降序重新安排
	int l = 1, r = n;
	for(int i = 1; i <=n; i++){
		if(m[i].min_ab == m[i].a){
			products[l++] = m[i]; //a升序
		}else{
			products[r--] = m[i];//b降序
		}
	}

排好序后,用当前a与前一个b相比较,当a>=b时,统计a,当a<b时,统计b,同时a可以继续生产下一个产品,在下一个产品的a里扣去已经生产的时间。

//统计时间
	int time = products[1].a;
	for(int i = 2; i <= n; i++){
		if(products[i].a >= products[i-1].b){
			time += products[i].a;//当前产品a用时大于等于前一个b用时
		}else{
			time += products[i-1].b;//当前产品a生产用时小于前一个b用时
			
			//当前a生产线可以继续生产下一个产品,在下一个产品扣去相应时长
			if(i < n){
				products[i+1].a -= (products[i-1].b-products[i].a);
			}
		}
	}

【完整代码】

#include <bits/stdc++.h>
struct Node{
	int a,b,p,min_ab;
}products[10005],m[10005];
bool comp(Node x, Node y){
	return x.min_ab < y.min_ab;
}
using namespace std;

int main(int argc, char *argv[]) {
	int n;
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> products[i].a;
		products[i].p = i;
	}
	for(int i = 1; i <= n; i++){
		cin >> products[i].b;
	}
	
	for(int i  = 1; i <= n; i++){
		//统计a,b中最小的一个
		m[i].min_ab = min(products[i].a,products[i].b);
		m[i].a = products[i].a,m[i].b = products[i].b;
		m[i].p = products[i].p;
	}
	//按min_ab升序
	sort(m + 1,m + n + 1,comp);
	
	//按照a升序,b降序重新安排
	int l = 1, r = n;
	for(int i = 1; i <=n; i++){
		if(m[i].min_ab == m[i].a){
			products[l++] = m[i]; //a升序
		}else{
			products[r--] = m[i];//b降序
		}
	}
	
	//统计时间
	int time = products[1].a;
	for(int i = 2; i <= n; i++){
		if(products[i].a >= products[i-1].b){
			time += products[i].a;//当前产品a用时大于等于前一个b用时
		}else{
			time += products[i-1].b;//当前产品a生产用时小于前一个b用时
			
			//当前a生产线可以继续生产下一个产品,在下一个产品扣去相应时长
			if(i < n){
				products[i+1].a -= (products[i-1].b-products[i].a);
			}
		}
	}
	cout << time + products[n].b << endl;
	for(int i = 1; i <= n; i++){
		cout << products[i].p << " ";
	}
	return 0;
}

贪心算法训练(七)——加工生产调度(流水作业调度问题) 贪心算法训练(七)——加工生产调度(流水作业调度问题) 1. 问题描述   某工厂收到了 n 个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以送到 B 车间。某个产品 i 在 A、B 两车间加工的时间分别为 $A_i$、$B_i$。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短?这里所说的加工... 阅读详情

相关推荐

【题解】 加工生产调度

题目来源:loj 题目描述 某工厂收到了 个产品的订单,这 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。 某个产品 在 A,B 两车间加工的时间分别为 。怎样安排这 个产品的加工顺序,才能使总的加工时间最短。 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时间。 输入格式 第一行仅—个数据 ,表示产...

cjx的博客 1280

工厂生产调度(贪心算法)

某工厂收到了n个产品的订单,这n个产品分别在AB两个车间加工并且必须先在A车间加工后才可以到B车间加工。某个产品在 AB两车间加工的时间分别为A,B。怎样安排这n个产品的加工顺序,才能使总的加工时间最短。这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在AB两车间加工完毕的时间

m0_66016308的博客 1117

1425 加工生产调度

1425 加工生产调度 这个题和排队接水很像,贪心的问题都差不多 首先先说一下,一本通的数据这个题可能炸了,因为这个题基本提交都是25分,但是代码并没有问题 求一个物品的总时间最少,就是让机器空闲的时间尽量少 这就是贪心 也就是说,在A机器工作的时候,B机器是空闲,那么这样就会很浪费时间,如果B机器加工的时候,同样,A机器也得等待这个物品加工完成后再运作 所以我们大胆得想象,要使机器空余得时间尽量小,就要把A机器上 加工时间最短得部件最先加工,这样让B机器能再最短空闲内开始加工,把B机器上加工时间最短的部件

CCCCDEV_CCCC的博客 435

贪心算法(4.加工生产调度(做题思路分析))

1、流水作业调度问题(解题思路在下边) 加工生产调度 题目描述: 某工厂收到了个产品的订单,这个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。 某个产品在 A,B 两车间加工的时间...

code华奇 3281

1424:喷水装置——1425:加工生产调度【贪心之区间问题和流水调度问题】

1424:喷水装置——1425:加工生产调度【贪心之区间问题和流水调度问题】

lybc2019的博客 651

基于ESP32的气象雷达站设计与实现

物联网技术通过嵌入式设备实现环境数据的实时采集与可视化,其中ESP32凭借其双核处理器和WiFi/蓝牙功能成为热门选择。本项目利用ESP32结合LVGL图形库,构建了一个低成本气象监测系统,通过OpenWeatherMap API获取全球气象数据并在7英寸触摸屏上动态展示。系统采用三级优化策略处理高分辨率雷达图,包括服务端预处理、硬件加速解码和显示增强,有效解决了内存占用和帧率问题。在物联网设备开发中,类似方案可应用于智能家居、农业监测等场景,特别是需要实时数据可视化的领域。通过SPIFFS存储和zlib压

weixin_42524864的博客 422

1425:加工生产调度

【题目描述】 某工厂收到了nn个产品的订单,这nn个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。 某个产品ii在 A,B 两车间加工的时间分别为Ai,BiAi,Bi。怎样安排这nn个产品的加工顺序,才能使总的加工时间最短。 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时间。 【输入】 第一行仅—个数据nn,表示产品的数量; 接下来nn个数据是表示这nn个产品在 A 车间加工...

C_Dreamy的博客 1572

vmware虚机Debian10磁盘空间无损扩容

该方法不适和LVM的磁盘管理 备份 一定要先做备份,虚机中直接创建一个快照备份 vm上增加空间 初始给的40G空间不够需要扩容,vm那给系统添加到100G 重新分区 查看当前分区情况 sudo fdisk -l

lms99251的博客 7455

1425:【例题4】加工生产调度

1425:【例题4】加工生产调度 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 2196 通过数: 571 【题目描述】 某工厂收到了 n 个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。 某个产品 i 在 A,B 两车间加工的时间分别为Ai,Bi。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时

Aimer的博客 1274

Clion+platformIO开发ESP32时找不到lib文件中引入第三方库的头文件(头文件下有波浪线),实际编译是成功的解决方法

Clion+platformIO开发ESP引入第三方库文件编译器无法找到.h文件但编译成功

zs5218的博客 1852

小智AI MCP协议实战:从语音指令到设备响应的完整链路拆解

本文深入拆解了小智AI MCP协议在智能语音交互中的完整工作流程。通过一个“调节音量”的真实场景,详细阐述了从语音采集、云端AI意图理解与决策,到MCP协议下的工具调用、设备端执行,最终完成语音反馈的每一个技术环节。文章重点分析了MCP协议如何通过标准化的交互模型,解决AI意图与设备控制间的“最后一公里”通信难题,实现高效可靠的设备响应。

defi6farmer的博客 248

奥赛一本通 1425 加工生产调度

奥赛一本通 1425 加工生产调度

qq_39680218的博客 413

回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证

回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证 目录回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证基本介绍划分原理留一划分交叉验证K折交叉数据下载程序设计参考资料致谢 基本介绍 在机器学习里,通常来说我们不能将全部用于数据训练模型,否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果。为了解决这一问题,有如下常用的方法: 第一种是最简单的,也是很容易就想到的。我们可以把整个数据集分成两部分,一部分用于训练,一部分用于验证,这也就是我们经常提到的训练集

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 6375

加工生产调度(信息学奥赛一本通-T1425)

【题目描述】 某工厂收到了n个产品的订单,这n个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。 某个产品i在 A,B 两车间加工的时间分别为Ai,Bi。怎样安排这n个产品的加工顺序,才能使总的加工时间最短。 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时间。 【输入】 第一行仅—个数...

Alex_McAvoy的博客 2843

Unity之Timeline教程

Unity Timeline是Unity的一种时间轴编辑器工具,用于制作和管理游戏中的动画、剧情以及事件触发。它提供了直观的界面,使得开发者可以通过拖放操作轻松创建和编辑时间轴。Activation Track:用于控制物体的激活状态。可以在轨道上添加关键帧,控制物体的激活和非激活状态。Animation Track:用于处理物体的动画。可以在此轨道上添加关键帧,编辑物体的动画状态。Audio Track:用于处理场景中的音频。可以管理音频的播放、暂停、淡入淡出等操作。

TxNet 9441

34、Text2KGBench与GeoQuestions1089:知识图谱生成与地理空间问答的新进展

本文介绍了Text2KGBench和GeoQuestions1089在知识图谱生成与地理空间问答领域的最新进展。Text2KGBench提供了一个开放且可复现的基准,用于从文本生成知识图谱,并结合多个LLM模型和评估工具推动研究。GeoQuestions1089是目前最大的地理空间问答数据集,与GeoQA2系统结合,推动了地理空间问答系统的发展。文章还探讨了技术挑战和未来研究方向,包括多模态知识图谱生成和深度学习优化的地理空间问答系统。

css33的专栏 114

信息学奥赛一本通 1425:【例题4】加工生产调度 | 洛谷 P1248 加工生产调度

本文研究了加工生产调度问题的贪心解法。通过邻项交换法分析最优加工序列的条件,推导出相邻产品应满足min(a_i,b_{i+1})≤min(a_{i+1},b_i)的排序规则。由于该规则不满足严格弱序的不可比传递性,进一步调整为:当min值相等时按a_i<a_j排序。最终实现时,先按推导规则排序产品,再顺序加工并计算总完成时间。算法复杂度为O(nlogn),能高效解决该调度优化问题。

君义NOIP的博客 471

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

俯视角射击游戏)是一类以俯视视角进行游戏展示的射击游戏。在这种游戏中,玩家控制着一个角色或载具,从俯视的角度上方观察游戏世界,并与敌人进行战斗。这种视角使玩家能够有更好的全局观察和策略性,同时也强调快速反应和精确射击。视角:俯视角度可以是固定的,也可以随着玩家角色的移动而变化,但都允许玩家以全局视角观察整个战场,有利于制定战略和规划行动。射击:玩家通常需要使用各种武器来与敌人进行战斗,包括枪械、爆炸物等。射击动作依赖于玩家的反应速度和准确性。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7831

信息学奥赛一本通提高篇 1425:【例题4】加工生产调度 贪心算法

某工厂收到了 n 个产品的订单,这 n个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。将这些任务排序,若A车间时间小于B车间时间,A车间时间短的排前面,若A车间时间大于B车间时间,B时间长的排前面。这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时间。最后的 n 个数据是表示这 n 个产品在 B 车间加工各自所要的时间。1425:【例题4】加工生产调度。

长春高老师编程 1037

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

第1部分 基础算法(提高篇)--第1章 贪心算法1425:【例题4】加工生产调度

1425:【例题4】加工生产调度 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 2047 通过数: 529 【题目描述】 某工厂收到了 n 个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。 某个产品 i 在 A,B 两车间加工的时间分别为Ai,Bi。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时

zqhf123的博客 1876

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

加工生产调度

1425:【例题4】加工生产调度 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 2662 通过数: 689 【题目描述】 某工厂收到了 n 个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。 某个产品 i 在 A,B 两车间加工的时间分别为Ai,Bi。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时

Aimer的博客 1718

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 1424. 喷水装置
下一篇: 1426. 智力大冲浪
mapleleafcn
博客等级 码龄16年 55粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值