作者回复: 赞。顶上去!空间优化的思路是正确的。
作者回复: 赞!
作者回复: 差不多可以这么说。这是因为动态规划思想的核心就是用小问题的最优解去推导更大问题的最优解,最终通过组合子问题的最优解得到原问题的答案,自底向上很好的顺应了这一思想。同时,自底向上推导也符合状态转移方程的定义。所以这么说是恰到好处的。
作者回复: 感谢你的肯定。事实上动态规划的提出正是从贪心算法开始的,为了让大家能够深刻理解动态规划的由来,我们有必要从贪心算法开始,再到穷举,最后再到动态规划。理解了其本质,才能说真正理解了动态规划。 不然,刷了再多题,看了再多讲解,也是空中楼阁,抓不住问题的根源,很难真正掌握这门手艺。
作者回复: 你理解的很透彻! 事实上,动态规划解法都是从小问题推广到大问题的,也就是你说的自底向上。虽然这里所说的是让计算逼近初始化状态,但其实真正的计算方向,是反过来的。
作者回复: 对的。DP里肯定是用到了和贪心类似的“根据当前情况“求解”下一步的最优解“的思路。只不过DP是在分析问题的性质和结构后定义了一个正确的”贪心“函数,确保每一步的贪心(局部最优解)得到的就是这种状况下的全局最优解,只不过求解顺序肯定是自下向上而已。同时又利用缓存避免重复计算。 其实这里自底向上主要省去的还是时间成本。
作者回复: 没有问题。赞。
作者回复: 这个解法没问题,但是有一个建议,即需要注意在解题的时候,最好不要就地修改输入数组的内容。这样做对性能损耗比较大。
作者回复: 顶一下,让其他人也能看到
作者回复: 初始化为-1,是前面采用比较容易理解的递归+备忘录直接实现的时候。下面使用循环的动态规划中初始化的值是k+1。之所以不初始化为-1是因为后面需要取min,用k+1可以代表无穷大。