动态规划是在干什么
最重要的一句话:动态规划=局部最优(贪心)+递推(降价)+记录存储结果
做动态规划的时候脑子里要有两个集合,已经考察过的顶点集合S和没有考察过的顶点集合V。并且刚开始只考虑最后一个元素,假设其他元素都已经考虑过了(递推)
对于动态规划本来要考虑的问题,它可能是指数级别复杂度的,比如背包问题O(2^N)
但是,通过选取一种可以描述所有情况的状态,再通过状态之间的关系,列举所有可能的状态把它变为多项式级别。
动态规划的英文dynamic programming的programming是指用表格来记忆问题,其实是一种记忆化搜索。(DFS通过剪枝也不是严格的指数级别)
动态规划的通常做法:
1.刻画一个最优解的结构特征(设计状态)
2.递归地定义最优解的值
3.计算最优解(通常自底向上)
动态规划分类
动态规划一般可分为线性动规,区域动规,树形动规,背包动规四类。
线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等;
区域动规:石子合并&#