码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-31 10:52:09      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:pre   node   sso   bsp   ret   math   target   ==   def   

最长公共子上升序列

技术图片

 

 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\n",dp[flag].len);
56     for(int i=1;i<=dp[flag].len;i++){
57         printf("%d ",dp[flag].ans[i]);
58     }
59     printf("\n");
60     return 0;
61 }

 

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

标签:pre   node   sso   bsp   ret   math   target   ==   def   

原文地址:https://www.cnblogs.com/wsy107316/p/12244684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!