最长公共子上升序列(LCIS)

Posted wsy107316

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长公共子上升序列(LCIS)相关的知识,希望对你有一定的参考价值。

最长公共子上升序列

技术图片

 

 AC_Code

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstring>
 5 #include <string>
 6 #include <cmath>
 7 #include <cstdlib>
 8 #include <algorithm>
 9 using namespace std;
10 typedef long long ll;
11 const int maxn = 1010;
12 const int inf=0x3f3f3f3f;
13 
14 struct node{
15     int len;
16     int ans[maxn];
17 }dp[maxn],maxx;
18 int a[maxn],b[maxn];
19 
20 int main()
21 {
22     int n,m;
23     scanf("%d",&n);
24     for(int i=1;i<=n;i++){
25         scanf("%d",&a[i]);
26     }
27     scanf("%d",&m);
28     for(int i=1;i<=m;i++){
29         scanf("%d",&b[i]);
30     }
31 
32     for(int i=1;i<=n;i++){
33         maxx.len=0;
34         memset(maxx.ans,0,sizeof(maxx.ans));
35         for(int j=1;j<=m;j++){
36             if( a[i]>b[j] && dp[j].len>maxx.len ){
37                 maxx = dp[j];
38             }
39             else if( a[i]==b[j] ){
40                 dp[j]=maxx;
41                 dp[j].len=maxx.len+1;
42                 dp[j].ans[dp[j].len] = b[j];
43             }
44         }
45     }
46 
47     int flag=0;
48     int maxxx=-inf;
49     for(int i=1;i<=n;i++){
50         if( dp[i].len>maxxx ){
51             maxxx = dp[i].len;
52             flag=i;
53         }
54     }
55     printf("%d
",dp[flag].len);
56     for(int i=1;i<=dp[flag].len;i++){
57         printf("%d ",dp[flag].ans[i]);
58     }
59     printf("
");
60     return 0;
61 }

 

以上是关于最长公共子上升序列(LCIS)的主要内容,如果未能解决你的问题,请参考以下文章

LCIS(最长公共上升子序列)

题解LCIS

HDU-1423 最长公共上升子序列(LCIS)

HDU 5904 LCIS DP

LCIS-最长公共上升子序列

BSOJ1004 -- TYVJ1071LCIS最长公共上升子序列