动态算法,最早的例子看的是最小树,以为是贪心的变种。
后面又看了切钢条,才有点初步理解。首先dp.的programming 的意思是表格法。
动态算法,其实更应该看成分治的变种。
1.首先问题必须可以缩小规模下去,所以就是可以划出最优子问题。
2.和分治法不同的是,分治法中,n问题只依赖某个确定的比n小的问题, 而动态规划中,n问题,可能依赖 1,2,3,...n-1 中的任意多个,
所以要求我们必须从最小规模求最优解开始,并记录最优解,供更大规模使用。正因为从最小规模的最优开始,这样导致看起来像贪心。呵呵。
先试着走最优的一步,但是并没有把走的那步一定当作解的一环,而是暂时更新结果,再重新回到开头。
动态法是一种,总领思想是分治,实施起来却像贪心的算法,必须具有最优子问题特性。
一般采用自底向上的表格法,也可以采用 形式上自顶向下,本质自底向上的递归来处理。
常见算法
01背包
找零