我可以通过普通函数和递归函数来打印LIS的长度。但是我想用C++在给定数组中打印LIS子序列的索引。如何打印来自给定数组的最长增量子序列(LIS)?
这里是我的功能找到LIS的长度:
int lis(int *arr, int n)
{
int *lis, i, j, max = 0;
lis = (int*) malloc (sizeof(int) * n);
for (i = 0; i < n; i++)
lis[i] = 1;
for (i = 1; i < n; i++)
for (j = 0; j < i; j++)
if (arr[i] > arr[j] && lis[i] < lis[j] + 1)
lis[i] = lis[j] + 1;
for (i = 0; i < n; i++)
if (max < lis[i])
max = lis[i];
/* Free memory to avoid memory leak */
free(lis);
return max;
}
这里array[10]={7 6 2 3 4 1 8 5 9 10}
这里LIS Length=6
我想打印数{2 3 4 6 8 9}
指数(它不是序列其arrray索引,我想要打印的)序列索引array[10]
提示:'lis [i]'在最长增长子序列中的最后一项的索引处达到其最大值。 – aschepler 2013-02-11 05:24:21