码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 1264 基因匹配Match(LCS转化LIS)

时间:2014-06-23 08:07:04      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   http   get   代码   

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1264

题意:给出两个数列,每个数列的长度为5n,其中1-n每个数字各出现5次。求两个数列的最长公共子列。

思 路:首先找出每个数字在第二个数列中出现的位置,对于第一个数列构造出一个新的数列,每个数用这个数在第二个数列中出现的5个位置代替。这样求最长上升子 列。注意的是,在求到每个数(这里指原第一个数列中的每个数)为止的LIS时,替换后的5个数字要先求大的。。不清楚的看代码。

 

int a[N*5],b[N*5],n;
vector<int> V[N];
int s[N*5];




void add(int x,int t)
{
    while(x<N*5)
    {
        if(s[x]<t) s[x]=t;
        x+=x&-x;
    }
}


int get(int x)
{
    int ans=0;
    while(x)
    {
        if(s[x]>ans) ans=s[x];
        x-=x&-x;
    }
    return ans;
}


int main()
{
    RD(n);
    int i,j;
    FOR1(i,n*5) RD(a[i]);
    FOR1(i,n*5) RD(b[i]),V[b[i]].pb(i);
    int ans=0,temp,x;
    for(i=1;i<=n*5;i++)
    {
        for(j=4;j>=0;j--)
        {
            x=V[a[i]][j];
            temp=get(x-1)+1;
            if(temp>ans) ans=temp;
            add(x,temp);
        }
    }
    PR(ans);
}

 

 

 

BZOJ 1264 基因匹配Match(LCS转化LIS),布布扣,bubuko.com

BZOJ 1264 基因匹配Match(LCS转化LIS)

标签:style   class   blog   http   get   代码   

原文地址:http://www.cnblogs.com/jianglangcaijin/p/3799458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!