前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最长公共子序列(稀疏序列)nlogn解法

最长公共子序列(稀疏序列)nlogn解法

作者头像
attack
发布2018-04-12 12:12:02
8610
发布2018-04-12 12:12:02
举报

首先这种做法只能针对稀疏序列,

比如这种情况:

abc abacabc。

会输出5

,,,,就比较尴尬,

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #define lli long long int 
 7 using namespace std;
 8 const int MAXN=4001;
 9 const int maxn=0x3f;
10 void read(int &n)
11 {
12     char c='+';int x=0;bool flag=0;
13     while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
14     while(c>='0'&&c<='9')
15     x=(x<<1)+(x<<3)+c-48,c=getchar();
16     flag==1?n=-x:n=x;
17 }
18 int a[MAXN];
19 int b[MAXN];
20 int n;
21 int c[MAXN];// 预处理后的数组
22 int tot=0;
23 int dp[MAXN]; 
24 char aa[MAXN];
25 char bb[MAXN];
26 void work()
27 {
28         memset(dp,0x3f,sizeof(dp));
29         tot=0;
30         memset(c,0,sizeof(c));
31         memset(a,0,sizeof(a));
32         memset(b,0,sizeof(b));
33         for(int i=0;i<strlen(aa);i++)
34             a[i+1]=aa[i]-48;
35     
36         for(int i=0;i<strlen(bb);i++)
37             b[i+1]=bb[i]-48;
38 
39         for(int i=1;i<=strlen(bb);i++)
40         {
41             for(int j=strlen(aa);j>=1;j--)
42                 if(b[i]==a[j])
43                     c[++tot]=j;
44         }
45         //for(int i=1;i<=tot;i++)
46         //    printf("%d ",c[i]);
47         for(int i=1;i<=tot;i++)
48         {
49             int p=upper_bound(dp+1,dp+tot+1,c[i])-dp;
50             if(dp[p]==c[i])
51                 continue;
52             dp[p]=c[i];
53         }
54 }
55 int  main()
56 {
57     //ios::sync_with_stdio(false);
58     while(~scanf("%s %s",aa,bb))
59     {
60         work();
61         for(int i=1;i<=tot+1;i++)
62         {
63             if(dp[i]>=maxn)
64             {
65                 printf("%d\n",i-1);
66                 break;
67             }
68         }
69     }
70     
71     return 0;
72 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档