记忆化搜索和动态规划常常是两种成对出现的解法。
合唱
这道题来自网易2018校园招聘编程题真题集合的倒数第二题。
记忆化搜索偏重于在传统的递归搜索中复用一些中间结果。其框架大致为result = search(start)
形式,并且在能够复用前必定已经到达过一次递归底部。
对于本题,记忆化搜索是简单易懂的。
1 | int solve(int i, int j) { |
常可以借助于反向DP来取代记忆化搜索里面的递归。
正向DP的方法容易进入一个误区,这里的dp[i][j]
并不一定从dp[i - 1][j]
和dp[i][j - 1]
之间转移得到,例如dp[3][2]
完全可以是由dp[3][0]
得到的。