Skip to content

Commit 7984aa6

Browse files
committed
add first DP solution to longest subsequence
1 parent c3cf59d commit 7984aa6

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#define MAXLEN 100
2+
3+
#include <stdio.h>
4+
5+
typedef int SubsequencesMatrix[2][MAXLEN];
6+
7+
void printMaximumsMatrix(SubsequencesMatrix matrix, int len)
8+
{
9+
10+
for (int i = 0; i < len; i++)
11+
{
12+
printf("%d, ", matrix[0][i]);
13+
}
14+
15+
printf("\n");
16+
17+
for (int i = 0; i < len; i++)
18+
{
19+
printf("%d, ", matrix[1][i]);
20+
}
21+
printf("\n");
22+
}

longestAscendingSubsequence/main

71.2 KB
Binary file not shown.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#include "longestAscendingSubsequence.h"
2+
3+
int main(int argc, char const *argv[])
4+
{
5+
int sequence[MAXLEN] = {2, 4, 3, 5, 1, 7, 6, 9, 8};
6+
int length = 0;
7+
SubsequencesMatrix subsequences;
8+
9+
for (int i = 0; sequence[i] != '\0'; i++)
10+
{
11+
length++;
12+
// printf("element %d = %d \n", i, sequence[i]);
13+
14+
if (i == 0)
15+
{
16+
subsequences[0][i] = 1; // subsequence max length
17+
subsequences[1][i] = -1; // subsequence last item index
18+
}
19+
else
20+
{
21+
int maxIndex = 0, maxLen = 1;
22+
23+
for (int j = 0; j < i; j++)
24+
{
25+
if ((sequence[j] < sequence[i]) && (subsequences[0][j] >= maxLen))
26+
{
27+
maxLen = subsequences[0][j] + 1;
28+
maxIndex = j;
29+
}
30+
}
31+
32+
subsequences[0][i] = maxLen;
33+
subsequences[1][i] = maxIndex;
34+
}
35+
}
36+
37+
printMaximumsMatrix(subsequences, length);
38+
39+
return 0;
40+
}

0 commit comments

Comments
 (0)