最长公共上升子序列||LCIS
1 #include<cstdio> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cmath> 5 #include<vector> 6 #include<algorithm> 7 #include<cstring> 8 #include<vector> 9 #include<map> 10 #include<stack> 11 #define maxn 3000+50 12 #define inf 0x7fffffff 13 #define xiao 1e-9 14 using namespace std; 15 int dp[maxn][maxn],a[maxn],b[maxn],n; 16 int main() 17 { 18 cin>>n; 19 for(int i=1;i<=n;++i) scanf("%d",&a[i]); 20 for(int i=1;i<=n;++i) scanf("%d",&b[i]); 21 memset(dp,0,sizeof(dp)); 22 int max1=0; 23 for(int i=1;i<=n;++i) 24 { 25 max1=0; 26 for(int j=1;j<=n;++j) 27 { 28 dp[i][j]=dp[i-1][j]; 29 if(a[i]>b[j]&&max1<dp[i-1][j]) max1=dp[i-1][j]; 30 if(a[i]==b[j]) dp[i][j]=max1+1; 31 } 32 } 33 max1=0; 34 for(int i=1;i<=n;++i) if(max1<dp[n][i]) max1=dp[n][i]; 35 cout<<max1; 36 return 0; 37 } 38 //给出的是两个序列长度相等时的LCIS,长度不相等时也是一样的,加一个n1就好。 39