最长公共上升子序列||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           
原文地址:https://www.cnblogs.com/TYH-TYH/p/4921501.html