Lis subproblem: DP [I] records the length of the longest ascending subsequence ending with a [I]
DP [1] = 1; <br/> for (I = 2; I <= N; I ++) <br/>{< br/> temp = 0; <br/> for (j = 1; j <I; j ++) <br/> if (a [I]> A [J] & DP [J]> temp) <br/> temp = DP [J]; <br/> DP [I] = temp + 1; <br/>}
Subproblem of LCS: DP [I] [J] records the length of the longest common subsequence of S1 ending with I and S2 ending with J
N1 = strlen (S1 + 1); <br/> n2 = strlen (s2 + 1); <br/> for (I = 0; I <= N1; I ++) <br/> DP [I] [0] = 0; <br/> for (j = 0; j <= n2; j ++) <br/> DP [0] [J] = 0; <br/> for (I = 1; I <= N1; I ++) <br/> for (j = 1; j <= n2; j ++) <br/> If (S1 [I] = S2 [J]) <br/> {<br/> DP [I] [J] = DP [I-1] [J-1] + 1; <br/> P [I] [J] = 0; <br/>}< br/> else if (DP [I-1] [J]> = DP [I] [J-1]) <br/> {<br/> DP [I] [J] = DP [I-1] [J]; <br/> P [I] [J] = 1; <br/>}< br/> else <br/> {<br/> DP [I] [J] = DP [I] [J-1]; <br/> P [I] [J] =-1; <br/>}< br/> printlcs (p, S1, N1, N2 ); </P> <p> void printlcs (int B [] [N], char * X, int I, Int J) <br/>{< br/> if (I = 0 | j = 0) <br/> return; <br/> If (B [I] [J] = 0) <br/> {<br/> printlcs (B, X, I-1, J-1 ); <br/> printf ("% C", X [I]); <br/>}< br/> else if (B [I] [J] = 1) <br/> printlcs (B, X, I-1, J); <br/> else <br/> printlcs (B, X, I, J-1); <br/>}