zoukankan      html  css  js  c++  java
  • P1439 【模板】最长公共子序列

    题目描述

    给出1-n的两个排列P1和P2,求它们的最长公共子序列。

    输入输出格式

    输入格式:

     

    第一行是一个数n,

    接下来两行,每行为n个数,为自然数1-n的一个排列。

     

    输出格式:

     

    一个数,即最长公共子序列的长度

     

    输入输出样例

    输入样例#1: 复制
    5 
    3 2 1 4 5
    1 2 3 4 5
    
    输出样例#1: 复制
    3

    说明

    【数据规模】

    对于50%的数据,n≤1000

    对于100%的数据,n≤100000

     

    刚开始sb,,没想dp,hh。。

    打了一个复杂度超级高的,,,

    10分,,

    然后就是一般的暴力dp了,

    50:

     

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    int n;
    int a[100002],b[100002],f[1002][1002];
    
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    		scanf("%d",&a[i]);
    	for(int i=1;i<=n;++i)
    		scanf("%d",&b[i]);
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=1;j<=n;++j)
    		{
    			if(a[i]==b[j])
    				f[i][j]=f[i-1][j-1]+1;
    			else f[i][j]=max(f[i-1][j],f[i][j-1]);
    		}
    	}
    	printf("%d",f[n][n]);
    	return 0;
    }
    

     

    然后正解:转为最长上升子序列问题,(这里的最长上升是,,出现位置的序号上升,,,)

     

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    int n,x,m;
    int a[100002],pos[100002],f[100002];
    
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%d",&x);
    		pos[x]=i;
    	}	
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%d",&x);
    		a[i]=pos[x];
    	}	
    	for(int i=1;i<=n;++i)
    	{
    		if(a[i]>f[m])
    		{
    			m++;
    			f[m]=a[i];
    		}
    		else f[lower_bound(f+1,f+m+1,a[i])-f]=a[i];
    	}
    	printf("%d",m);
    	return 0;
    }

     

    如果你不开心,那我就把右边这个帅傻子分享给你吧,  

    你看,他这么好看,那么深情的望着你,你还伤心吗?  

    真的!这照片盯上他五秒钟就想笑了。  

    一切都会过去的。    

     

     

  • 相关阅读:
    项目Alpha冲刺(团队6/10)
    项目Alpha冲刺(团队5/10)
    项目Alpha冲刺(团队4/10)
    项目Alpha冲刺(团队3/10)
    项目Alpha冲刺(团队1/10)
    Alpha代码规范、冲刺任务与计划
    团队作业第六次—团队Github实战训练
    Alpha冲刺(8/10)——2019.4.30
    Alpha冲刺(7/10)——2019.4.29
    Alpha冲刺(6/10)——2019.4.28
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9752678.html
Copyright © 2011-2022 走看看