10.25模拟 列车调度

2. 列车调度
(manage.cpp/c/pas)
 【 问题描述 】
 有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。

/*简单的O(n)模拟枚举 注意开大数组*/
#include<cstdio>
#include<iostream>
using namespace std;
int n,ans=0,k[100010],a[100010];
int main()
{
    freopen("manage.in","r",stdin);
    freopen("manage.out","w",stdout);
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    ans++;
    k[1]=a[1];    //k[i]是某个轨道的最小列车号 
    for (int i=2;i<=n;i++)
    {
        bool p=true;
        for (int j=1;j<=ans;j++)
            if (a[i]<k[j])
            {
                p=false;
                k[j]=a[i];
                break;
            }
        if (p==true)
        {
            ans++;
            k[ans]=a[i];
        }
    }
    printf("%d",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

 

posted @ 2016-10-25 19:12  球痞丶小七  阅读(269)  评论(0编辑  收藏  举报