题目描述
给出 1,2,…,𝑛 的两个排列 𝑃1 和 𝑃2 ,求它们的最长公共子序列。
输入格式
第一行是一个数 𝑛。
接下来两行,每行为 𝑛 个数,为自然数 1,2,…,𝑛 的一个排列。
输出格式
一个数,即最长公共子序列的长度。
代码:
package lanqiao;import java.io.*;
import java.util.*;public class Main {public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] a = new int[n + 1];int[] b = new int[n + 1];for(int i = 0;i < n;i ++){a[i] = sc.nextInt();}for(int i = 0;i < n;i ++){b[i] = sc.nextInt();}int[][] dp = new int[n+ 1][n + 1];for(int i = 1;i <= n;i ++){for(int j = 1;j <= n;j ++){if(a[i - 1] == b[j - 1]){dp[i][j] = dp[i - 1][j - 1] + 1;}else{dp[i][j] = Math.max(dp[i - 1][j],dp[i][j - 1]);}}}System.out.println(dp[n][n]);}
}