LCS

 1 for (int i=1;i<=n;i++) {
 2         for (int j = 1; j <= m; j++) {
 3             dp[i+1][j+1]=dp[i][j];
 4             if (a[i] == b[j]) {
 5                 dp[i + 1][j + 1] = dp[i][j] + 1;
 6             } else {
 7                 dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);
 8             }
 9         }
10     }
11 int main() {
12     scanf("%d", &n);
13     for (int i = 1; i <= n; i++) {
14         scanf("%d", &x);
15         a[x] = i;
16     }
17     for (int i = 1; i <= n; i++) {
18         scanf("%d", &x);
19         b[i] = a[x];
20     }
21     for (int i = 1; i <= n; i++) {
22         if (b[i] > d[l]) {
23             d[++l] = b[i];
24         } else {
25             int k = lower_bound(d + 1, d + l + 1, b[i]) - d;
26             d[k] = b[i];
27         }
28     }
29     printf("%d
", l);
30 }
原文地址:https://www.cnblogs.com/Accpted/p/11191882.html