题目链接: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 }
时间: 2024-11-05 15:51:01