经典例题
大家肯定想用递归做
思路大概就是这样
递归到最后一行就是对应的D(i,j)
然后往上推
但是这样会超时,因为存在大量的重复计算
比如调用第一行MasSum(7)需要调用MaxSum(3)和MaxSum(8)
但是调用第二行MaxSum(3)还要调用3行的MaxSum(8)和3行的MaxSum(1)
第二行的MaxSum(8)也会调用第三行的MaxSum(1)
是不是第三行的MaxSum(1)就调用了两次
这就重复了
随着数据量增多,重复也会增多
改进
算出来的数存起来,再调用直接取就行,避免重复计算
程序代码
so:在算法中避免重复计算来提高算法效率就是动态规划
一般思路
先讲答案枚举一些(或全部)
画出一个二叉树-尝试写一个递归函数来求解
如果发现有大量的重复计算
可以用动态规划-可以用数组或者哈希表进行存储
最终可以找规律写成迭代形式(循环)