我可以通過普通函數和遞歸函數來打印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