Skip to content

Commit 16da568

Browse files
committed
added LIS in c
1 parent 23638c8 commit 16da568

File tree

1 file changed

+62
-0
lines changed
  • DP/LongestIncreasingSubsequence

1 file changed

+62
-0
lines changed

DP/LongestIncreasingSubsequence/LIS.c

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
typedef struct node{
5+
int data;
6+
struct node* next;
7+
}node;
8+
9+
node* append(node* head,int d){
10+
node *temp=NULL;
11+
temp=(node *)malloc(sizeof(node));
12+
temp->data=d;
13+
temp->next=NULL;
14+
if(head==NULL){
15+
head=temp;
16+
return head;
17+
}
18+
temp->next=head;
19+
return temp;
20+
}
21+
22+
void printReverse(node* head){
23+
if (head->next==NULL)
24+
return;
25+
printReverse(head->next);
26+
printf("%d ", head->data);
27+
}
28+
29+
int main(void) {
30+
int n,i,j;
31+
scanf("%d",&n);
32+
int a[n],lis[n];
33+
for(i=0;i<n;i++){
34+
scanf("%d",&a[i]);
35+
lis[i]=1;
36+
}
37+
node *head[n];
38+
for(i=0;i<n;i++){
39+
head[i]=NULL;
40+
head[i]=(node *)malloc(sizeof(node));
41+
head[i]=append(head[i],a[i]);
42+
}
43+
for(i=1;i<n;i++){
44+
for(j=0;j<i;j++){
45+
if(a[i]>a[j] && lis[i]<lis[j]+1){
46+
lis[i]=lis[j]+1;
47+
head[i]=append(head[j],a[i]);
48+
}
49+
}
50+
}
51+
int max=0,index=0;
52+
for (i=0;i<n;i++){
53+
if (max<lis[i]){
54+
max=lis[i];
55+
index=i;
56+
}
57+
}
58+
// printf("%d %d\n",max,index);
59+
printReverse(head[index]);
60+
printf("\n");
61+
return 0;
62+
}

0 commit comments

Comments
 (0)