zoukankan      html  css  js  c++  java
  • UVA

    input

    n,p,q 2<=n<=250 1<=p,q<=n*n

    1 a1 a2 a3 ... ap  1<ai<n*n,ai!=aj

    1 b1 b2 b3 ... bq  1<bi<n*n,bi!=bj

    output

    最长公共子序列个数

    做法:将b数组中的数变为a数组中数的下标,a中不存在的数可以去掉,然后求LIS即可

    #include <cstdio>
    #include <queue>
    #include <cstring>
    #include <iostream>
    #include <cstdlib>
    #include <algorithm>
    #include <vector>
    #include <map>
    #include <set>
    #include <ctime>
    #include <cmath>
    #include <cctype>
    #define MAX 63000
    #define LL long long
    using namespace std;
    int a[MAX],b,len[MAX],idx[MAX],bi[MAX],T,p,q,m,n,cas=1;
    int main()
    {
        freopen("/home/user/桌面/in","r",stdin);
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d%d",&m,&p,&q);
            scanf("%*d");
            for(int i=1;i<=p;i++)
            {
                scanf("%d",&a[i]);
                idx[a[i]]=i;//当a[i]范围很大时可用hash代替
            }
            n=0;
            scanf("%*d");
            for(int i=0;i<q;i++)
            {
                scanf("%d",&b);
                if(a[idx[b]]) bi[++n]=idx[b];
            }
            len[1]=bi[1];
            int l=1;
            for(int i=1;i<=n;i++)//求LIS
            {
                if(bi[i]>len[l]) len[++l]=bi[i];
                else *lower_bound(len+1,len+l+1,bi[i])=bi[i];
            }
            printf("Case %d: %d
    ",cas++,l+1);
        }
        //printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
        return 0;
    }
  • 相关阅读:
    springboot笔记(五章)整合持久层技术
    Java基础复习(一)
    springboot复习
    JUC(2)
    JUC(1)
    springboot笔记(一~四章)入门、基础配置、整合视图技术、整合Web开发
    JVM复习
    NIO(New IO)
    hive 函数
    hive基础知识
  • 原文地址:https://www.cnblogs.com/cdyboke/p/5012671.html
Copyright © 2011-2022 走看看