列车调度

火车站的列车调度铁轨的结构如下图所示。


Figure

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

输入格式:

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

输出格式:

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

输入样例:

9
8 4 2 5 3 9 1 6 7

输出样例:

4

转换为最长上升子列问题

思路1:模拟轨道

#include <iostream>
using namespace std;
#include <cmath>
#include <cstring>
#include <algorithm>
#include <stack>
#include <set>
int main()
{
    int a[100005];
    int n,m,i,j,k,len;
    len=0;
    cin>>n;
    while(n--){
        cin>>m;
        if(len==0||m>a[len-1]){
            a[len++]=m;
        }
        else{
            int t=upper_bound(a,a+len,m)-a;
            a[t]=m;
        }

    }
    cout<<len<<endl;
}


思路2:贪心

#include <iostream>
using namespace std;
#include <cmath>
#include <cstring>
#include <algorithm>
#include <stack>
#include <set>
int main()
{
    int n,m,i,j,k;
    cin>>n;
    set <int> se;
    while(n--){
        cin>>m;
        if(se.empty()||*se.rbegin()<m){
            se.insert(m);
        }
        else{
            se.erase(se.upper_bound(m));
            se.insert(m);
        }
    }
    cout<<se.size()<<endl;
}

原文地址:https://www.cnblogs.com/ww123/p/8443263.html

时间: 2024-08-28 19:50:32

列车调度的相关文章

L2-014. 列车调度

火车站的列车调度铁轨的结构如下图所示. Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口离开.在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入.如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度? 输入格式: 输入第一行给出一个整数N (2 <= N <= 105),下一行给出从1到N的整数序号的一个重排列.数字间以空格

清华学堂 列车调度(Train)

列车调度(Train) Description Figure 1 shows the structure of a station for train dispatching. Figure 1 In this station, A is the entrance for each train and B is the exit. S is the transfer end. All single tracks are one-way, which means that the train ca

【PAT L2-014】列车调度(Dilworth定理)

[PAT L2-014]列车调度(Dilworth定理) L2-014. 列车调度 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 火车站的列车调度铁轨的结构如下图所示. Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口离开.在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入.如

pat l2-14 列车调度 dilworth+nlog(n)最长上升子序列

关于dilworth定理 这里引用一个大神的(http://blog.csdn.net/xuzengqiang/article/details/7266034) 偏序的概念: 设A是一个非空集,P是A上的一个关系,若关系P是自反的.反对称的.和传递的,则称P是集合A上的偏序关系.即P适合下列条件:(1)对任意的a∈A,(a,a)∈P;(2)若(a,b)∈P且(b,a)∈P,则a=b;(3)若(a,b)∈P,(b,c)∈P,则(a,c)∈P,则称P是A上的一个偏序关系.带偏序关系的集合A称为偏序集

7-2 列车调度 (25 分)

题目: 样例输入: 98 4 2 5 3 9 1 6 7 样例输出: 4 思路: 要想得到最少的调度序列,那就要找出最少的下降序列的个数.拿上边的例子来说:有如下四个下降序列 8 4 2 1 5 3 9 6 7 所以只需要四个调度队列就可以了. 又根据定理:最小的下降序列的个数等于最长上升子序列的长度.(这个定理证明没看懂,直接懵逼,菜是原罪啊!!)剩下的就是一个裸的最长上升子序列问题了. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f

ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(Tshing Hua OJ - Train)

本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) Description Figure 1 shows the structure of a station for train dispatching. Figure 1 In this station, A is the entrance for each train and B is the exit. S is the transfer end.

小技巧。,。 二分

以列车调度为例子吧 这里用一个写法比较简单的二分 把范围放小以后 就不用那么费脑子了.,. #include<iostream> #include<algorithm> #include<cstring> #define inf 1000009 using namespace std; int my_lower_bound(int a[],int len,int key) { int low=1,hight=len; while(hight-low>6) { in

linux 进程基础(四)

本小结主要对linux进程的调度部分进行学习总结. linux是个支持多任务的操作系统,因此才会涉及到进程的调度,调度的目的是为了让多个进程并 存.在当前CPU是多核(单核的CPU系统中面对多任务时也涉及到进程的调度)的情况下,CPU可以高效的 对处于可执行状态的进行调度处理.以提高系统的业务处理能力. 进程的调度其实质就是CPU对处于可执行状态的进程进行处理的过程,这要求linux进程调度器在设 计上可以处理几个甚至是相互矛盾的目标: A.高效性:高效意味着在相同的时间下要完成更多的任务: B

17.8.15第七次测试

1.二叉树 [问题描述] 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值: (3)左.右子树也分别为二叉排序树: (4)没有键值相等的结点. 完全二叉树:只有最下面的两层结点度能够小于2,并且最下面一层的结点 都集中在该层最左边的若干位置的二叉树. 上图中,(a)和(b)是完全二叉树,(c)和(d)是非完全二叉树. 给出N个数,且这N个数构成1至N的排列.现在