"Template" increments the common sub-sequence up to the longest
Two-dimensional
1#include <stdio.h>2#include <algorithm>3#include <string.h>4 using namespacestd;5 6 intn,m,a[505],b[505],dp[505][505];7 8 intLICs ()9 {Ten intmax,i,j; OneMemset (DP,0,sizeof(DP)); A for(i =1; i<=n; i++) - { -MAX =0; the for(j =1; j<=m; J + +) - { -DP[I][J] = dp[i-1][j]; - if(A[i]>b[j] && max<dp[i-1][j]) +MAX = dp[i-1][j]; - if(a[i]==B[j]) +DP[I][J] = max+1; A } at } -MAX =0; - for(i =1; i<=m; i++) - if(max<Dp[n][i]) -MAX =Dp[n][i]; - returnMAX; in}
Optimized into one-dimensional
1#include <stdio.h>2#include <string.h>3#include <algorithm>4 using namespacestd;5 6 inta[505],b[505],dp[505],n,m;7 8 intLICs ()9 {Ten intI,j,max; OneMemset (DP,0,sizeof(DP)); A for(i =1; i<=n; i++) - { -MAX =0; the for(j =1; j<=m; J + +) - { - if(A[i]>b[j] && max<Dp[j]) -MAX =Dp[j]; + if(a[i]==B[j]) -DP[J] = max+1; + } A } atMAX =0; - for(i =1; i<=m; i++) - if(max<Dp[i]) -MAX =Dp[i]; - returnMAX; -}
Template maximum public incrementing subsequence