美文网首页
LCS动态规划

LCS动态规划

作者: Ell1ot | 来源:发表于2019-07-16 18:34 被阅读0次

相关笔记

思路

在给定的输入中寻找最优可能,可以通过动态规划实现。需要在一个未排序的序列中找到满足要求的最长序列,并输出最长序列长度。可以根据样例逐个值推导,发现每引入一个新的值时,最长序列的长度就可能+1,得到关系状态方程。

实现

1.输入:使用vector存放整数型的不定长数组,按照题目要求实现输入有点麻烦了。使用string将输入作为字符直接使用会更方便。
2.输出:dp数组存放的是各值作为新序列的最后一个值时序列的最大长度,因此需要对他们进行排序,找到最大的序列长度。
3.动态规划:外层的循环将原序列的每一个值进行遍历,内层的循环通过判断当前值和前面值的关系找到最长可能。判断的条件包括:当前值大于前面值,当前值具有的最大长度是目前最大的。

代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

vector<int> a;

int main()
{
    int i=0;
    do{
        cin>>i;
        a.push_back(i);
    }while(getchar()!='\n'); //输入
     
    int len=a.size();        
    int dp[len];
    for(int i=0;i<len;i++)  //dp[i]=(max+1(a[j]<a[i]&&dp[j]>max))
    {
        int max=0;
        for(int j=i;j>=0;j--)
            if(a[i]>a[j]&&dp[j]>max)
                max=dp[j];
        dp[i]=max+1;
    }

    sort(dp,dp+len);
    cout<<dp[len-1];        //输出 
}
总结

不仅是输入数字并按照大小排序时可使用这种方法,输入字母并按照字母顺序排序也可以使用。处理动态规划类题目时重要的一步是找到关系状态方程,确定状态方程后再想循环哪一个变量、循环中是否有判断条件、怎样实现等问题。
在理解之后这道题显得比较容易,但如果没有答案参考直接使用动态规划做的话会纠结很久。再做些动态规划的题目,让这个过程变熟悉些。

相关文章

  • LCS:最长公共子序列

    LCS(最长公共子序列)是动态规划里的一道经典的问题。动态规划

  • LCS动态规划

    相关笔记 思路 在给定的输入中寻找最优可能,可以通过动态规划实现。需要在一个未排序的序列中找到满足要求的最长序列,...

  • 深度透析最长公共子序列算法

    最长公共子序列(Longest Common Subsequenen, LCS) 1、概念 动态规划(dynami...

  • 动态规划问题-LCS

    LCS 最长公共子序 如下 x 和 y 的最长公共子序长度为为 7 公式 实现 代码

  • 最长公共子序列

    最长公共子序列(Longest Common Subsequence,简称 LCS)是非常经典的动态规划题目。通常...

  • (6)动态规划(上) LCS

    LCS 问题描述: 在两个给定的序列中, 找出最长的公共子序列(Largest Common Sequence),...

  • 【动态规划】LCS算法 python

    问题描述1求两字符串的连续最大公共子字符串(The Longest Common Substring)这个LCS问...

  • 动态规划、LCS、01背包问题

    动态规划:将一个具有最优子结构性质的问题分成若干个子问题,在求解过程中,记录下子问题的结果,存储在一个表格中,使得...

  • 动态规划--最长公共子序列

      动态规划是解决一类问题的方法,而不是某种固定的算法。 eg: 求最长公共子序列(LCS: Longest Co...

  • 最长公共子序列(LCS)——动态规划

    问题描述   子序列是指,从序列中选出一些子元素,需满足其前后关系与在原序列中相同;公共是指该序列同时是两个序列的...

网友评论

      本文标题:LCS动态规划

      本文链接:https://www.haomeiwen.com/subject/fczkkctx.html