首页 > 代码库 > hdu_5904_LCIS(DP)
hdu_5904_LCIS(DP)
题目链接: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 }
hdu_5904_LCIS(DP)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。