文章目录
双序列型动态规划
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、计算顺序
老师的代码: