zoukankan      html  css  js  c++  java
  • 几题LCS后的小总结

    先得理解最长上升子序列吧,这还是非常简单的。

    然后就是要真正理解LCS;

    真正理解源于做题,做题就像查漏补缺一样,你总有不会的地方。

    这里写图片描述

    非常彻底地理解该图(还是去做题啦)

    = =瞎几把乱说有两种问题
    【完全的求一个最长公共子序列】
    (非常彻底地理解路径或者说是状态转移的规律)
    先是初始化
    付一个0的dp数组,把dp作为一个介体达到一种最长公共子序列的目的
    然后就开始更新dp的值,dp的状态转移方程OK,然后根据状态转移方程,
    可以很清楚地知道,路径的变化就是状态转移变化的方向。
    【这样就可以实现路径的初始模型】

    【详细阐述路径】
    就是标记啊,因为LCS问题上面,状态转移只有三种,向下,向右,还有右下,然后就是搞三个标记,在竖直方向上移动的话就是-1,在水平方向上移动的话就是1,然后如果满足了相等,要斜对角移动的话就是0,然后递归进行输出。

    【反着的一个题目(拓展)】

    另一个问题就是给你两个序列,再给你一个序列,然后问你前面两个序列能否组成被给的第三个序列。

    DP求解:定义dp[i][j]表示A中前i个字符与B中前j个字符是否能组成C中的前 (i+j) 个字符,如果能标记true,如果不能标记false;
    满足什么状态可以转变成什么状态;

    可做的题(先去做求最大长度的练练手,然后理解路径,就可以做输出的题了):Hdoj3779,hdoj1501,poj2192,poj2250

    【不会就去学,不要贴代码,思路最重要】

  • 相关阅读:
    关于产品
    Windows服务 + Quartz.NET
    C#
    C#
    URL
    前端生态系统总结
    字符串相似度
    Process Explore & Windbg
    webpack
    JS
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934576.html
Copyright © 2011-2022 走看看