列车调度问题[通俗易懂]

列车调度问题[通俗易懂]题目:高铁货运站的调配问题我们国家大力发展道路交通基础设施,最近这些年修建了大量的高铁线路,以促进国内的物资运输和调配,ZZ是一个超级货运站,是连接亚欧货运的枢纽站,现在ZZ货运站列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

题目:高铁货运站的调配问题

我们国家大力发展道路交通基础设施,最近这些年修建了大量的高铁线路,以促进国内的物资运输和调配,ZZ是一个超级货运站,是连接亚欧货运的枢纽站,现在ZZ货运站列车调度铁轨的结构如下图所示。

 

                                                                             列车调度问题[通俗易懂]

 

两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?ZZ站希望你帮他们设计一个算法,然后给出最终结果。

【输入格式】:

输入第一行给出一个整数N (2 ≤ N ≤105),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。

【输出格式】:

在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。

【输入样例】:

9

8 4 2 5 3 9 1 6 7

【输出样例】:

4

1)题目分析: 此题为 ‘’求最少下降序列个数‘’的问题

要让列车降序输出,每一条轨道上必须编号大的先进入,编号小的后进入,所以每一条轨道上的列车是下降序列。如果待处理的列车编号比一条轨道上的最小编号要大,那么就要新开一条轨道让该车进入。

如果输入的列车编号是一个上升序列,那么需要的轨道条数就等于上升序列的个数。

样例中:

各条轨道应为:

————————————8 4 2 1

————————————5 3

————————————9 6

————————————7

2)解题方法思路:

a[i] 存储第i 下降序列 末尾的最小值

二分法:快速查找与待处理元素最相近的 下降序列 末尾元素,并更新元素

3)代码:

#include<stdio.h>
#include<stdlib.h>

int a[100001]; //存储每条轨道最后的数 

int main(){
	int n,m; //n为输入的数据个数,m做临时存储 
	int k=1; //k为轨道数,并初始化为1 
	scanf("%d\n",&n);
	scanf("%d",&m);
	a[1]=m;//初始化a[1] 
	for(int i = 1;i < n; i++){
		scanf("%d",&m);
		if(m>a[k]){//比a中最大数还大,就增加一条轨道 
			k++;
			a[k] = m;
		}
	
		else{ //二分法查找到a中与m最相近的值,然后更新那条轨道上的末尾的数 
			int l = 1;
			int r = k;
			
			while(l<=r){
				int mid = (l+r)/2;
				if(m>=a[mid]){
					l++;
				}
				else{
					r--;
				}
			}
			a[l] = m;
		}
		
	}
		
	printf("%d",k); //打印轨道数k 
	
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159393.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Weblogic性能优化(图解)

    Weblogic性能优化(图解)

    2022年3月3日
    36
  • C语言中数组超出范围,检测数组下标边界是否超出范围解决方案

    C语言中数组超出范围,检测数组下标边界是否超出范围解决方案C/C++codetemplateclassArray;templateclassArrayBody{friendclassArray;T*tpBody;intiRows,iColumns,iCurrentRow;ArrayBody(intiRsz,intiCsz){tpBody=newT[iRsz*iCsz];iRows=iRsz;iColumns=iCsz…

    2022年10月18日
    0
  • php avc,什么是AVC编码?简述H.264概念和发展

    php avc,什么是AVC编码?简述H.264概念和发展频编解码技术有两套标准,国际电联(ITU-T)的标准H.261、H.263、H.263+等;还有ISO的MPEG标准Mpeg1、Mpeg2、Mpeg4等等。H.264/AVC是两大组织集合H.263+和Mpeg4的优点联合推出的最新标准,最具价值的部分无疑是更高的数据压缩比。在同等的图像质量条件下,H.264的数据压缩比能比H.263高2倍,比MPEG-4高1.5倍。以下我们简单介绍H.264的…

    2022年9月16日
    0
  • cuda卸载与安装

    cuda卸载与安装cuda卸载1.正常卸载操作在cuda的安装目录下,有卸载脚本1.运行卸载脚本cd/usr/local/cuda/binsudo./uninstall_cuda_9.0.pl2.删除安装文件夹sudorm-rfcudasudorm-rcuda-9.0找不到uninstall的卸载操作1.正常卸载操作sudoapt-get–purgeremovecuda:卸载软件及其配置sudoapt-getautoremovecuda

    2022年9月6日
    3
  • 初级算法学习步骤

    初级算法学习步骤前言零散整理一个多月终于整理完了。。。。这是一篇初级算法学习的步骤总结,或许可以帮助你怎么去接触算法阅读本文需要一定java语法基础和api文档查看基础,但算法其实看重的是思想而不是语言,所以都可以借鉴。本人大二,参加过蓝桥杯。一直没时间吧之前的总结整理出来,现在准备整理一下用java做算法的一些东西……学习了两个月左右算法,从啥都不会到小白再到算是初级……做一个总结,请高手多多指…

    2022年6月19日
    30
  • 领域驱动实践总结(基本理论总结与分析+架构分析与代码设计V+具体应用设计分析)

    领域驱动实践总结(基本理论总结与分析+架构分析与代码设计V+具体应用设计分析)领域驱动设计DDD是一种设计思想,它可以同时指导中台业务建模和微服务设计(中台本质是业务模型,微服务是业务模型的系统落地),领域驱动设计强调领域模型和微服务设计的一体性,先有领域模型然后才有微服务,而不是脱离领域模型来谈微服务设计。

    2022年4月28日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号