Luogu P1439 令f[i][j]表示a的前i个元素与b的前j个元素的最长公共子序列 可以得到状态转移方程: if (a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; dp[i][j]=max(dp[i][j],dp[i-1][j],dp[i][j-1]); 时空复杂度都为O(n^2^) 对于本题这种做法显然是无法接受的. 我们可以对这个题目进行转化.仔细看题,可以发现a,b两个序列都是1-n的排列. 那么,我们可以利用映射,将a中的数一一映射成为1,2,3,4,5…