动态规划——最长公共上升子序列(C++)

Posted 【機關】

tags:

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

源代码:

#include<cstdio>
int m,n,ans(0),i1[3001],i2[3001],f[3001][3001]={0}; //二维。
int main()
{
    scanf("%d",&m);
    scanf("%d",&n); 
    for (int a=1;a<=m;a++)
      scanf("%d",&i1[a]);
    for (int a=1;a<=n;a++)
      scanf("%d",&i2[a]); 
    for (int a=1;a<=m;a++)
    {
        int max(0);
        for (int b=1;b<=n;b++)
        {
            if (i1[a]>i2[b]&&f[a-1][b]>max) //在寻找上升序列的同时,存储其最大成功值。 
              max=f[a-1][b];
            if (i1[a]!=i2[b]) //如不相等,则无变化。 
              f[a][b]=f[a-1][b];
            if (i1[a]==i2[b]) //若相等,在最大值基础上+1。 
              f[a][b]=max+1;
        }
    }
    for (int a=1;a<=n;a++)
      ans=ans>f[m][a]?ans:f[m][a]; //已传值到底部,遍历寻找最大值,即为所求。 
    printf("%d",ans);
    return 0;
}

以上是关于动态规划——最长公共上升子序列(C++)的主要内容,如果未能解决你的问题,请参考以下文章

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

动态规划 最长上升子序列模型——进阶

动态规划 最长上升子序列模型——进阶

动态规划 最长公共子序列 过程图解

关于用动态规划法求最大公共子序列的问题

力扣之最长上升子序列 2022-02-28~03-06