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

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值