首页 > 试题广场 >

Array

[编程题]Array
  • 热度指数:1045 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解

小红有两个长度为n的排列AB。每个排列由[1,n]数组成,且里面的数字都是不同的。

现在要找到一个新的序列C,要求这个新序列中任意两个位置(i,j)满足:

如果在A数组中C[i]这个数在C[j]的后面,那么在B数组中需要C[i]这个数在C[j]的前面。

请问C序列的长度最长为多少呢?


输入描述:
第一行一个整数,表示N。

第二行N个整数,表示A序列。

第三行N个整数,表示B序列。

满足:N<=50000


输出描述:
输出最大的长度
示例1

输入

5
1 2 4 3 5
5 2 3 4 1

输出

4

说明

最长的C为1,3,4,5
python动态规划之抱头痛哭...
上面的图是我的二维dp,超内存。
思路:把b逆序,求a和b的最长公共子序列,转化为经典动规。
下面的图是[小二郎求offer]的一维dp,超时。
思路:tmp存储a和b的关系,即b的元素在a中的位置。


编辑于 2019-08-20 16:42:17 回复(0)