DP的问题也是绕不开啊,基本思想从0-1背包而来,已经进行过总结了。其他还有好多种的变形,一种种来归纳吧
(一)两个序列的DP问题(给定两个string)
这类的题目总结后以下述几步解决即可。
1.在两个序列的情况下,往往是用二维DP
vector<vector<int>> dp(m+1,vector<int>(n+1,0);
2.然后进行初始化,也即是一个取空串时另一个进行遍历的初始值
3.往往需要根据s[i-1]和t[j-1]的相等于否进行两个分支的处理,此时dp[i][j]表示s串中前i个字符与t串中前j个字符的结果情况
下面看几道典型的题即可
1.绕不开的,肯定是经典的 leetcode No.72 Edit Distance
为什么说经典呢,三种不同的operation操作,对应三种不同的dp状态,这是首先一点需要清楚的;另一点,初始状态的分析,空串与非空串的对应关系。综上所述,严格遵顼我前面说到的分析处理步骤。