Description
但是小L想考验一下小T,所以,他给小T出了一个难题.
他拿出了他所有的配饰并摆成两列,如果两个配饰的型号一样并且出现在不同列中,那么我们就可以认为这两个配饰为情侣配饰.另外,由于某些不为人知的原因,我们规定,在顺序选取的情况下,每选定的一对配饰必须比前面选定的一对配饰的型号要大.小T最多能够选取多少对配饰呢?
Input
共四行
第一行一个数N 表示第一列配饰的个数
第二行N个数 分别表示第一列配饰的型号
第三行一个数M 表示第二列配饰的个数
第四行M个数 分别表示第二列配饰的型号
Output
仅一个数K,表示最多能选取的情侣配饰的对数.
分析
裸的LCIS
直接放网页了——LCIS之类的集合
话说好像有一个库里有max这个保留字
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
int f[1005][1005],a[1005],b[1005];
int n,m,ma;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=1;i<=m;i++)
scanf("%d",&b[i]);
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
{
ma=0;
for(int j=1;j<=m;j++)
{
f[i][j]=f[i-1][j];
if ((a[i]>b[j])&&(f[i-1][j]>ma))
ma=f[i-1][j];
if (a[i]==b[j])
f[i][j]=ma+1;
}
}
int ans=0;
for(int i=1;i<=m;i++)
if (ans<f[n][i]) ans=f[n][i];
printf("%d\n",ans);
}