一个数列的最长上升子列,是指其所有递增的子列中最长的一个子列。
给定一个长度为 n 的数列 an,求这个数列的最长上升子列的长度。
例如对数列 1 7 2 8 3 4,这个数列的最长递增子数列是 1 2 3 4,长度为 4;次长的长度为 3,包括 1 7 8、1 2 3 等。
第一行一个正整数 n,表示数列元素个数,n <= 1000。
第二行 n 个正整数,从左到右给出数列的每一项。
设 dp[i] 表示以 a[i] 结尾的最长上升子序列的长度,则
dp[i] = 1 + max{ dp[j] : j < i 且 a[j] < a[i] }
答案为所有 dp[i] 的最大值。状态数 O(n),每次转移 O(n),总复杂度 O(n^2),可以通过本题。