5-10 列车调度 (25分)
火车站的列车调度铁轨的结构如下图所示。

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

输入第一行给出一个整数N (2 \le≤ N \le 10^5≤10
​5
​​ ),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。
输出格式:

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

9
8 4 2 5 3 9 1 6 7
输出样例:

4

//思路:
//鸽笼原理(又称抽屉原理)即:将n+1个苹果放进n个抽屉里面,则至少有一个抽屉有不少于两个苹果。
//
//本题想要降序输出就是找降序子序列个数与最长上升子串的长度关系用鸽笼原理类比推导,假设有K个降序子串,最长上升子序列为L,把L看成是苹果个数,K看成是抽屉个数,如果L>K,那若将L个苹果放入K个抽屉中,必然有至少一个抽屉要有上升的序列则不能达成降序输出的目标,所以K最小为L。
下面给出队列和set集合两种解法:
方法一:队列(求最长上升字串长度)
#include <iostream>
#include <malloc.h>
#include <cstdio>
#include <cstdlib>
#define OK 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -1
#define QUEUEADD 10
#define QUEUE_INIT_SIZE 100002
using namespace std;
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType *elem;
    int length;
    int queuesize;
} SqQueue;
Status Init(SqQueue &L)
{
    L.elem=(ElemType*)malloc(sizeof(ElemType)*QUEUE_INIT_SIZE);
    if(!L.elem) exit(ERROR);
    L.length=0;
    L.queuesize=QUEUE_INIT_SIZE;
    return OK;
}
Status Insert(SqQueue &L,int x)
{
    if(L.length>=L.queuesize)//扩容
    {
        L.elem=(ElemType*)realloc(L.elem,sizeof(ElemType)*(QUEUE_INIT_SIZE+QUEUEADD));
        if(!L.elem) exit(ERROR);
    }

int  f=0;
        int  r=L.length-1;

if(x<L.elem[f])//
        {
            *(L.elem)=x;
        }
        else  if(x>L.elem[r])
        {
            L.length++;
            L.elem[++r]=x;
        }
        else//二分!!!超时问题
        {
            while(f<r)
            {
                int mid=(f+r)/2;
                if(L.elem[mid]<x)
                    f=mid+1;
                else
                    r=mid-1;
            }
            L.elem[r]=x;
        }

return OK;

}
int main()
{
    SqQueue L;
    Init(L);
    int n,x;
    scanf("%d",&n);
    scanf("%d",&x);//第一个元素输入
        L.elem[L.length]=x;
        L.length++;
        --n;
    while(n--)
    {
        scanf("%d",&x);
        Insert(L,x);
    }
    printf("%d\n",L.length);

return 0;
}
方法二:贪心思想:基于贪心,要想降序输出,就是每次进入的列车都找比他大的列车的中最小的一个跟在其后头降序输出,实践到算法就是每次都找到那个比他大最小的车插进他后面再将他删除。

set(用到函数:lower_bound()(函数用法:c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器)

#include<bits/stdc++.h>
using namespace std;

set<int>s;
int n,x;
int main()
{
    scanf("%d",&n);

--n;  
   s.insert(x);
    while(n--)
    {
         scanf("%d",&x);

if(s.lower_bound(x)!=s.end())
            {
                s.erase(s.lower_bound(x));
                s.insert(x);//找到一个比此数大的使其跟在后面的.
            }
            else
            s.insert(x);//新开.

}
    printf("%d\n",s.size());
    return 0;
}

5-10 列车调度 (25分)相关推荐

  1. 7-55 列车调度 (25 分)

    7-55 列车调度 (25 分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条 ...

  2. 【CCCC】L2-014 列车调度 (25分),贪心,set维护序列

    problem L2-014 列车调度 (25分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入 ...

  3. PTA 7-13 列车调度 (25 分) C语言和C++实现(二分查找)

    7-13 列车调度 (25 分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条 ...

  4. 5-3 列车调度 (25分)

    5-3 列车调度   (25分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条 ...

  5. 【PTA】5-10 列车调度 (25分)

    5-10 列车调度   (25分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一 ...

  6. 5-10 列车调度 (25分) set OR 最长上升子序列

    5-10 列车调度 (25分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨 ...

  7. L2-014 列车调度 (25 分)

    L2-014 列车调度 (25 分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意 ...

  8. 7-7 列车调度 (25分)

    7-7 列车调度 (25分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道 ...

  9. 7-6 列车调度 (25 分)

    7-6 列车调度 (25 分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨 ...

最新文章

  1. 系列文章--AJAX技术系列总结
  2. php pdo blob,PHP / PDO / MySQL:插入MEDIUMBLOB存储坏数据
  3. SharedPreferences记住用户密码 态判断应用是否首次启动等
  4. Hyperopt TypeError: 'generator' object is not subscriptable
  5. GUI实战|Python做一个文档图片提取软件
  6. 35岁前把下面十件事做好
  7. Yii2 的快速配置 api 服务 yii2-fast-api
  8. 中国大学慕课python答案第七章_中国大学慕课mooc用Python玩转数据章节答案
  9. linux裁剪内核和移植,嵌入式Linux内核裁剪及移植的研究与实现
  10. python绘制并列的条形图的方法_如何并排绘制具有相同X坐标的条形图('dodged')...
  11. 数据中心机房建设标准规范
  12. c语言 空心的倒三角形,C语言题目,请根据要求打印可空心倒三角形
  13. 中国象棋人机对弈搜索算法学习-极大极小值,负极大值,alpha-beta算法
  14. Windows中I/O完成端口机制详解
  15. 大数据第三季--flume(day2)-徐培成-专题视频课程
  16. Hand Crafted 特征 PK 纯学习的特征提取方法
  17. 冒泡排序及其三种写法
  18. PicPick Pro v7.0.0 屏幕截图编辑工具解锁全功能单文件版
  19. iptable详细配置
  20. Python第一天:你必须要知道的Python擅长领域以及各种重点学习框架(包含Python在世界上的应用)

热门文章

  1. ata计算机考试试题以及答案,ata计算机统考第一套模拟练习题.doc
  2. 设计模式六大原则: 一个萝卜一个坑 -- 单一职责原则
  3. java组合_Java组合
  4. 详解:Flutter内存泄漏解决方案
  5. java法师逃离_本性法师:逃离复杂 奔向简单的人生
  6. 八大排序(Java完整版)
  7. 今日头条的文章怎么同步到其他自媒体平台?
  8. 配置K8S出现以下错误“/proc/sys/net/ipv4/ip_forward contents are not set to 1”
  9. 1-2 四轴飞行器基本原理
  10. cocos 文字 TextAtlas TextBMFont Text