AcWing 272. 最长公共上升子序列

Posted qingyuyyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 272. 最长公共上升子序列相关的知识,希望对你有一定的参考价值。

#include<iostream>
using namespace std ;
const int N=3030;
int n;
int a[N];
int b[N];
int f[N][N];
//f[i][j] 
//表示所有由第一个序列的前i个字母,和第二个序列的前j个字母构成的,
//且以b[j]结尾的公共上升子序列 
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++) {
            //不包含a[i]的公共上升子序列 
            f[i][j]=f[i-1][j];
            //包含的 
            if(a[i]==b[j]) 
            {
                f[i][j]=max(f[i][j],1);
                for(int k=1; k<j; k++)
                    if(b[k]<b[j])
                        f[i][j]=max(f[i][j],f[i][k]+1);
            }
        }
    int res=0;
    for(int i=1; i<=n; i++) res=max(res,f[n][i]);
    printf("%d
",res);
    return 0;
}

 

 

以上是关于AcWing 272. 最长公共上升子序列的主要内容,如果未能解决你的问题,请参考以下文章

最长上升子序列模型

272. 最长公共上升子序列

动态规划线性dp问题总结:数字三角形最长上升子序列最长公共子序列最短编辑距离 题解与模板

AcWing夏季每日一题--最长公共子序列

AcWing 895. 最长上升子序列(LIS朴素做法)

《算法竞赛进阶指南》 0x50 动态规划