「一本通 1.1 例 4」加工生产调度(典型例题,值得一看)

2024-02-19 16:44

本文主要是介绍「一本通 1.1 例 4」加工生产调度(典型例题,值得一看),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目描述】

某工厂收到了 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,所有数值皆为整数。

本题关键:约翰逊法(johnson算法) 

不懂的可以参考这两篇文章

1.约翰逊法 - MBA智库百科 (mbalib.com)

2.约翰逊法_百度百科 (baidu.com)

本片文章就不多做讲解了,直接上代码!(代码里面有讲解)

#include<bits/stdc++.h>
using namespace std;struct f{int c,id;//c为x,y的最小值 
}a[10100];
int x[10100],y[10100],ans[10100];//x为在A车间的时间,y为在B车间的时间,ans为排序结果 bool cmp(f a1,f a2){return a1.c<a2.c;//按照二者的最小值来排序,方便存入ans中 
}
int main(){int n;cin>>n;for (int i=1;i<=n;i++){cin>>x[i];}for (int i=1;i<=n;i++){cin>>y[i];a[i].c=min(x[i],y[i]);a[i].id=i;}sort(a+1,a+n+1,cmp);//基础输入+排序 int l=1,r=n;//l为左端点,r为右端点 for (int i=1;i<=n;i++){if (x[a[i].id]==a[i].c){//如果最小值为A车间的时间,即为前一个 ans[l]=a[i].id;l++;//就将他放到前面 }else {ans[r]=a[i].id;r--;//反之就放在后面 }}//上述为约翰逊法(johnson算法) int s1=0,cnt=0;//s1为临时存储,cnt为结果 for (int i=1;i<=n;i++){//计算时间 s1+=x[ans[i]];//s1临时存储在A车间的时间永远都比B车间的时间长的情况 if (s1>cnt)cnt=s1;//如果时间大于前一个的cnt(即为上一次存储的cnt,也就是加上B车间时间的),就先存储 cnt+=y[ans[i]];//然后再加上ans当前的B车间的时间,以便下一次做判断 }cout<<cnt<<endl;for (int i=1;i<=n;i++){//输出 cout<<ans[i]<<" ";}return 0;
}

thanks for your looking

这篇关于「一本通 1.1 例 4」加工生产调度(典型例题,值得一看)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725284

相关文章

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

poj2505(典型博弈)

题意:n = 1,输入一个k,每一次n可以乘以[2,9]中的任何一个数字,两个玩家轮流操作,谁先使得n >= k就胜出 这道题目感觉还不错,自己做了好久都没做出来,然后看了解题才理解的。 解题思路:能进入必败态的状态时必胜态,只能到达胜态的状态为必败态,当n >= K是必败态,[ceil(k/9.0),k-1]是必胜态, [ceil(ceil(k/9.0)/2.0),ceil(k/9.

usaco 1.1 Broken Necklace(DP)

直接上代码 接触的第一道dp ps.大概的思路就是 先从左往右用一个数组在每个点记下蓝或黑的个数 再从右到左算一遍 最后取出最大的即可 核心语句在于: 如果 str[i] = 'r'  ,   rl[i]=rl[i-1]+1, bl[i]=0 如果 str[i] = 'b' ,  bl[i]=bl[i-1]+1, rl[i]=0 如果 str[i] = 'w',  bl[i]=b

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww