赞
踩
导读:
近两天开始学习动态规划,有一说一,学着真的d疼,动态规划是从暴力递归来的,一步步的推算真的让人找不到南北,不过,也有一说一,动态规划的思想确实先进,了解了动态规划的思想,问题就变得好解决多了。
动态规划的思想:若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。
线性动态规划的主要特点是状态的推导是按照问题规模 i 从小到大依次推过去的,较大规模的问题的解依赖较小规模的问题的解。
单串问题:
带维度单串
双串问题
一般使用二维矩阵dp来表示,有两个输入从串,长度分别为 m, n,此时子问题需要用 i, j 两个变量表示,分别代表第一个串和第二个串考虑的位置 dp[i][j]:=第一串考虑[0…i],第二串考虑[0…j]时,原问题的解。
较大规模的子问题只与常数个较小规模的子问题有关,其中较小规模可能是 i 更小,或者是 j 更小,也可以是 i,j 同时变小
一般情况下和dp[i-1][j-1], dp[i-1][j], dp[i][j-1]有关。
说了这么多,上一个题吧。leetcode1143:最长公共子序列
构建一个二维矩阵dp,当有相同元素时就在dp[i][j-1]基础上加一,否则就在dp[i-1][j-1], dp[i-1][j]取最大值,为什么这么做呢?主要有以下两点(个人见解):
dp路径问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。