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

hdu_5904_LCIS(DP)

时间:2016-09-24 23:16:51      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:hdu_5904_LCIS

题意:

给你两串数,让你找这两串数的最长公共子序列,并且这个最长公共子序列是连续的数值

题解:

我们首先先分别处理出a,b的每个数的最长连续的长度

然后随便找一串数来更新一下答案就行了

技术分享
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define F(i,a,b) for(int i=a;i<=b;i++)
 5 using namespace std;
 6 
 7 inline void up(int &a,int b){if(a<b)a=b;}
 8 
 9 const int N=1e5+7;
10 int a[N],b[N],T,n,m,f[N],aa[N],bb[N];
11 
12 int LCIS()
13 {
14     int ans=0;
15     memset(aa,0,sizeof(aa));
16     memset(bb,0,sizeof(bb));
17     F(i,1,n)up(aa[a[i]],aa[a[i]-1]+1);
18     F(i,1,m)up(bb[b[i]],bb[b[i]-1]+1);
19     if(n>m)F(i,1,m)up(ans,min(aa[b[i]],bb[b[i]]));
20     else F(i,1,n)up(ans,min(aa[a[i]],bb[a[i]]));
21     return ans;
22 }
23 
24 int main()
25 {
26     scanf("%d",&T);
27     while(T--)
28     {
29         scanf("%d%d",&n,&m);
30         F(i,1,n)scanf("%d",a+i);
31         F(i,1,m)scanf("%d",b+i);
32         printf("%d\n",LCIS());
33     }
34     return 0;
35 }
View Code

 

hdu_5904_LCIS(DP)

标签:

原文地址:http://www.cnblogs.com/bin-gege/p/5904338.html

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