通常の関数と再帰関数で LIS の長さを出力できます。しかし、C++ の特定の配列にある 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}
(配列インデックスのシーケンスではなく、印刷したいもの)シーケンスのインデックスarray[10]