您的位置:首页 > 其它

2016年提高组模拟题(20161111) 配饰 ssl 2569 LCIS的集合

2016-11-11 20:54 197 查看

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
[i]) ans=f
[i];
printf("%d\n",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: