【LCIS】最長公共上升子序列
1004 – 【TYVJ1071】LCIS最長公共上升子序列
Description
熊大媽的奶牛在小沐沐的薰陶下開始研究資訊題目。小沐沐先讓奶牛研究了最長上升子序列,再讓他們研究了最長公共子序列,現在又讓他們要研究最長公共上升子序列了。
小沐沐說,對於兩個串A,B,如果它們都包含一段位置不一定連續的數字,且數字是嚴格遞增的,那麼稱這一段數字是兩個串的公共上升子串,而所有的公共上升子串中最長的就是最長公共上升子串了。
奶牛半懂不懂,小沐沐要你來告訴奶牛什麼是最長公共上升子串。不過,只要告訴奶牛它的長度就可以了。
Input
第一行N,表示A,B的長度。
第二行,串A。
第三行,串B。
Output配對則是max(F[i
#include<iostream> #include<cstdio> using namespace std; const int maxn=5005; int a[maxn],b[maxn],f[maxn],n; inline int read() { int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9'){w=-1;ch=getchar();} while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();} return s*w; } int main() { int i,j,maxx=0; n=read(); for(i=1;i<=n;i++)scanf("%d",&a[i]); //a[i]=read(); for(i=1;i<=n;i++)scanf("%d",&b[i]); //b[i]=read(); for(i=1;i<=n;i++) { maxx=0; for(j=1;j<=n;j++) { if(b[j]<a[i]&&maxx<f[j])maxx=f[j]; if(b[j]==a[i])f[j]=maxx+1; } } maxx=0; for(i=1;i<=n;i++)if(maxx<f[i])maxx=f[i]; printf("%d",maxx); return 0; }