算法设计 最长递增子序列问题
1. 问题描述
求一个由n个整数组成的整数序列的最长递增子序列。一个整数序列的递增子序列可以是序列中非连续的数按照原序列顺序排列而成的。 最长递增子序列是其递增子序列中长度最长的。
2. 具体要求
输入:输入的第一行是一个正整数n,表示测试例个数。接下来几行是n个测试例的数据,每个测试例的数据由两行组成,其中第一行为一个正整数k (k<=500),表示整数序列的长度,第二行给出整数序列,整数之间用一个空格隔开。(设给出的每个整数序列的最长递增子序列都是唯一的。)
输出:对于每个测试例输出两行,第一行为最长递增子序列的长度,第二行为最长递增子序列,整数之间用一个空格隔开。两个测试例的输出数据之间用一个空行隔开。
3. 测试数据
输入:
2
5
3 1 4 2 3
6
1 3 9 5 2 6
输出:
3
1 2 3
4
1 3 5 6
代码:
/// <summary>
/// 输出最长子序列
/// </summary>
/// <param name="arr">数据数组</param>
/// <param name="pre">最短子序列前置点的数组</param>
/// <param name="i">要求的最长子序列的最后一位的下标</param>
void printLongest(int* arr, int* pre, int i)
{
if (pre[i] == -1)