算法之动态规划

动态规划总结

最优解 依赖重复计算的 独立的 子过程
1.发现最优解结构
2.推到递归式
3.自低向上存储子过程结果过(备忘录,非最优子过程,只是存储,相似迷宫)
4.最优解的存储和计算spa

这里1:
1)子问题发现/定义、假设已经有了最优解,怎么经过子问题解决。好比工厂最快流水线,已经选了一条路径,要知道如何选择的,须要知道除固定节点后前面如何选择的。矩阵乘法,知道划分后,须要知道最外层两个括号分别如何计算。LCS知道最终解后,须要知道除最后一个节点外前面解如何选择的。
2)选择 须要依赖哪些子问题(越少越好,矩阵乘法没法作到只依赖一个,依赖两个。工厂流水和LCS能够选择多个,可是一个很简单直接求取,选择依赖一个);须要选择依赖(矩阵循环全部一对可能选择其1,LCS和工厂选择知足更优的)
3)注意知足重复计算和独立(最长非重复路径这种问题由于一个子问题用的点其余子问题不能用,因此子问题的最优不是独立的,没法用动态规划),须要简单的证实最优子解的选择会致使最优解
4)局部计算(i-k或者0-2)rest

LCS:

两个串最长非连续公共子串
clipboard.pngcode

clipboard.png
假设最优解已有去推子问题(固有思惟就是对两个串加节点,才是n与n-1的关系,不太同样的思惟)递归

矩阵

矩阵最小乘法次数的组合
clipboard.png
一样的,考虑矩阵多一个n,n-1的关系,改思惟习惯ip

生产线

clipboard.png

clipboard.png
这个虽然能够用加一个节点,可是从最终最优解来推也能够的。leetcode

climits的INT_MAX
vector<vector<int> > ret(row,vector<int>(col));get

dfs不熟悉:
https://leetcode.com/problems...
https://leetcode.com/problems...
位运算:
https://leetcode.com/problems...it

相关文章
相关标签/搜索