您的位置:首页 > 其它

PAT L2-014. 列车调度 最长上升子序列

2018-03-24 10:10 288 查看
火车站的列车调度铁轨的结构如下图所示。



两端分别是一条入口(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
题意:求最少的多个最长递减的子序列,本来是打算利用最长上升子序列的变形来解决最长递减,后来发现可以反面出发。求多个最长递减==求一个最长递增子序列思路:最长递增子序列+二分#include<bits/stdc++.h>

#define N 100005
using namespace std;

int len,a
,dp
;
int main()
{
int n;
while(scanf("%d",&n)==1){
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
dp[1]=a[1];
len=1;
for(int i=2;i<=n;i++){
if(a[i]>dp[len])
dp[++len]=a[i];
else{
int pos=lower_bound(dp,dp+len,a[i])-dp;
dp[pos]=a[i];
}
}
printf("%d\n",len);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: