zoukankan      html  css  js  c++  java
  • 列车调度

    【 问题描述 】

     有N辆列车,标记为1,2,3,…,N。它们按照一定的次序进站,站台共有K个轨道,轨道遵从 先进先出的原则。列车进入站台内的轨道后可以等待任意时间后出站,且所有列车不可后退。现在要使出站的顺序变为N,N-1,N-2,…,1,询问K的最小值是多少。

    例如下图中进站的顺序为1,3,2,4,8,6,9,5,7,则出站的顺序变为9,8,7,6,5,4,3,2,1。

    【 输入格式 】

     输入文件名为manage.in。

     输入共2行。

     第 1 行包含1个正整数N,表示N辆列车。

     第 2 行包含N个正整数,为1至N的一个排列,表示进站次序。

    【 输出格式 】

     输出文件名为manage.out。

     输出共1行,包含1个整数,表示站台内轨道数K的最小值。

    【 输入输出样例1 】

    manage.in manage.out

    3

    1 2 3

    3

    【 输入输出样例2 】

    manage.in manage.out

    9

    1 3 2 4 8 6 9 5 7

    5

    【 数据规模与约定 】

     对于30%的数据,N≤10;

     对于70%的数据,N≤2000;

     对于100%的数据,N≤100000。

    /*
      这是唯一一个做得出来的题,直接模拟,也可以说是贪心
      题目要求每个车站的进入顺序编号大的一定有优先于编号小的,所以对于每次进入的车辆,枚举已有的车站,找一个能放下该车辆并且末尾车辆的编号最小的车站,放入该车辆。
    */
    #include<cstdio>
    #include<iostream>
    #define N 100010
    using namespace std;
    int q[N],n,len;
    int main()
    {
        //freopen("jh.in","r",stdin);
        freopen("manage.in","r",stdin);
        freopen("manage.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            int x;scanf("%d",&x);
            bool flag=false;
            int minn=N,pos;
            for(int j=1;j<=len;j++)
              if(q[j]>x&&q[j]<minn)
              {
                  flag=true;
                  minn=q[j];
                  pos=j;
              }
            if(flag)q[pos]=x;
            else
            {
                ++len;q[len]=x;
            }
        }
        printf("%d",len);
        return 0;
    }
  • 相关阅读:
    小内存 linux 主机部署 mysql
    IIS enable HTTP PUT and DELETE
    使用Topshelf部署.net core windows服务 Demo
    Windows Template Studio 创建 .net core wpf应用
    vue笔记——vue生命周期
    (转)idea如何快速查看接口的实现类
    vue项目设置启动自动打开浏览器
    批量添加题目功能(正则表达式的使用案例)
    markdown的diff效果
    SVN提交时取消某个文件的提交
  • 原文地址:https://www.cnblogs.com/harden/p/5997349.html
Copyright © 2011-2022 走看看