文章目录
定义
动态规划
在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线.这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题称为多阶段决策问题。在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义,称这种解决多阶段决策最优化的过程为动态规划方法 。动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式. ----选自百度百科
字符串动态规划
字符串动态规划是动态规划问题的一类,主要研究字符串 d p dp dp,该 d p dp dp解法与普通 d p dp dp基本一致。
个人理解思路
①找规律
通过找规律的方式推出状态转移方程。
②画图
通过画图的方式推出状态转移方程。
例题解析
题目名称
最长公共子序列
【HNOI】DNA分子的最佳比对
最长公共子序列题解
题目描述
原题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列 x = “ x 0 , x 1 , … , x n − 1 ” x=“x0,x1,…,xn-1” x=“x0,x1,…,xn−1”, 序列 Y = “ y 0 , y 1 , . . . , y k − 1 Y=“y_0,y_1,...,y_{k-1} Y=“y0,y1,...,yk−1是 X X X的子序列,存在 X X X的一个严格递增下标序 列 < i 0 , i 1 , . . . , i k − 1 > <i_0,i_1,...,i_{k-1}> <i0,i1,...,ik−1>,使得对所有的 j = 0 , 1 , . . . , k − 1 j=0,1,...,k-1 j=0,1,...,k−1,有 x i , j = " y j x_{i,j}="yj xi,j="yj。 例如, x = “ A B C B D A B ” , Y = “ B C D B ” x=“ABCBDAB”,Y=“BCDB” x=“ABCBDAB”,Y=“BCDB”是 X X X的一个子序列。 对给定的两个字符序列,求出他们最长的公共子序列长度。
简化描述:给定两个字符串,求解这两个字符串的最长公共子序列 ( L C S ) (LCS) (LCS)比如: B D C A B A BDCABA BDCABA 与 A B C B D A B ABCBDAB ABCBDAB的最长公共子序列为 4 4 4
题解
思路说明
设当前的最长公共子序列长度为 f [ i ] [ j ] f[i][j] f[i][j],则 f [ i ] [ j ] f[i][j] f[i][j]一定是由 f [ i − 1 ] [ j ] f[i-1][j] f[i−1][j]和 f [ i ] [ j − 1 ] f[i][j-1] f[i][j−1]转移过来的。如果把 a a