zoukankan      html  css  js  c++  java
  • 动态规划——最长公共上升子序列(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;
    }
  • 相关阅读:
    流程控制之while循环
    流程控制之if判断
    基本运算符
    格式化输出的三种方式
    Python与用户交互
    解压缩
    布尔类型
    字典类型
    列表类型
    字符串类型
  • 原文地址:https://www.cnblogs.com/koruko/p/5270115.html
Copyright © 2011-2022 走看看