文章目录
双序列型动态规划

77 · 最长公共子序列




动态规划4步法:
1、确定状态
最后一步





子问题

注意:f[i]代表第一个序列前i个字符,f[j]代表第二个序列前j个字符,
2、转移方程

和区间型动态规划的区别:

区间型f[i][j]表示从i到j。i的取值是0~n-1,j的取值是i~n-i。
双序列型f[i][j]表示i和j两个不同的序列。i的取值是0~m。j的取值是0~n。
3、初始条件和边界情况
双序列型动态规划就是考虑空序列和另一个序列的关系(包括空对空)。

4、计算顺序

记住,计算顺序是和转移方程相关的。这里的转移方程只和前一行和前一列有关,所以还是经典的计算顺序。

老师的代码:

老师讲了下,怎么通过pai来记录最长子序列是哪个:


29 · 交叉字符串





动态规划4步法:
1、确定状态
最后一步

子问题


2、转移方程

这题本来是苦难题,但是通过动态规划的思想,一下子就简单了很多。
3、初始条件和边界情况

4、计算顺序

老师的代码:

119 · 编辑距离




动态规划4步法:
1、确定状态
最后一步






子问题

2、转移方程

3、初始条件和边界情况

4、计算顺序

下面是老师的代码:

118 · 不同的子序列




动态规划4步法:
1、确定状态
最后一步




子问题

2、转移方程

3、初始条件和边界情况

这里初始条件是根据数学意义算出来的。
4、计算顺序

老师代码如下:

154 · 正则表达式匹配



动态规划4步法:
1、确定状态
最后一步


主要难点在于*的匹配。
子问题

2、转移方程

上面是普通matching,下面是*的情况,但是老师写出来,真的太简单了,记住简单的公式是因为想的多。想出来的。
3、初始条件和边界情况

4、计算顺序

下面是老师的代码:


192 · 通配符匹配





*和前面的字母不挂钩了。
动态规划4步法:
1、确定状态
最后一步

子问题

2、转移方程

3、初始条件和边界情况

4、计算顺序

老师的代码:

总结




