https://www.acwing.com/problem/content/274/
dp ij 以Bj结尾的最长公共上升子序列长度
#include<bits/stdc++.h> using namespace std; #define int long long #define si signed #define sc(x) scanf("%lld",&x); #define maxn 3009 int A[maxn]; int B[maxn]; int dp[maxn][maxn]; int n; si main() { sc(n); for(int i=1;i<=n;i++){ sc(A[i]); } for(int j=1;j<=n;j++){ sc(B[j]); } int ans=0; for(int i=1;i<=n;i++){ int val=0; for(int j=1;j<=n;j++){ if(A[i]==B[j]){ dp[i][j]=val+1; }else { dp[i][j]=dp[i-1][j]; } if(B[j]<A[i]){ val=max(val,dp[i][j]); } ans=max(ans,dp[i][j]); } } cout<<ans<<' '; }