#include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 10
int LIS(int array[], int line[], int len)
{
int i, j, k;
int LIS[MAXLENGTH];
int path[MAXLENGTH];
//1, -1, 2, -3, 4, -5, 6, -7
for(i = 0; i < len; i++)
{
path[i] = i;
}
for(i = 0; i < len; i++)
{
LIS[i] = 1;
for(j = 0; j < i; j++)
{
if(array[i] > array[j] && LIS[j] + 1 > LIS[i])
{
LIS[i] = LIS[j] + 1;
path[i] = j;
}
}
}
int max = 0;
int end = -1;
for(k = 0; k < len; k++)
{
if(LIS[k] > max)
{
max = LIS[k];
end = k;
}
}
i = 1;
line[0] = array[end];
while (path[end] != end)
{
line[i++] = array[path[end]];
end = path[end];
}
return max;
}
int main()
{
int i;
int data[8] = {1, -1, 2, -3, 4, -5, 6, -7};
int line[MAXLENGTH];
int max = LIS(data, line, 8);
printf("max = %d\n", max);
for (i = max - 1; i >= 0; i--)
{
printf("%d",line[i]);
}
return 0;
}
#include <stdlib.h>
#define MAXLENGTH 10
int LIS(int array[], int line[], int len)
{
int i, j, k;
int LIS[MAXLENGTH];
int path[MAXLENGTH];
//1, -1, 2, -3, 4, -5, 6, -7
for(i = 0; i < len; i++)
{
path[i] = i;
}
for(i = 0; i < len; i++)
{
LIS[i] = 1;
for(j = 0; j < i; j++)
{
if(array[i] > array[j] && LIS[j] + 1 > LIS[i])
{
LIS[i] = LIS[j] + 1;
path[i] = j;
}
}
}
int max = 0;
int end = -1;
for(k = 0; k < len; k++)
{
if(LIS[k] > max)
{
max = LIS[k];
end = k;
}
}
i = 1;
line[0] = array[end];
while (path[end] != end)
{
line[i++] = array[path[end]];
end = path[end];
}
return max;
}
int main()
{
int i;
int data[8] = {1, -1, 2, -3, 4, -5, 6, -7};
int line[MAXLENGTH];
int max = LIS(data, line, 8);
printf("max = %d\n", max);
for (i = max - 1; i >= 0; i--)
{
printf("%d",line[i]);
}
return 0;
}