动态规划核心思想
动态规划最核心的思想,就在于将问题拆分为一个个子问题,保留之前的计算结果,以达到减少计算量的效果。
我们可以举个例子:
A: 1+1+1+1+1+1+1+1 = ?
B ( 计算 ) : 8
A: 在上面等式的左边写上 "1+" 呢?
B (脱口而出) : 9
A: 你怎么这么快就得到答案了?
B: 只要在8的基础上加1就好了
A: 所以你不用重新计算,因为你记住了第一个等式的值为8。动态规划算法也可以说是记住求过的解来节省时间
1. 只有一间房屋时,我们选择偷这间房屋
2. 存在两间房屋时,选择偷两间中较大的那间
3. 如果房屋数量大于两间时,比如第三间,我们要考虑,第一间和第三间房屋的价值总和与第二间房屋的价值相比,哪个更大?如果第一间和第三间房屋的价值总和较大的话,我们会选择偷第一间和第三间;否则,我们则会选择不偷第一间和第三间,去偷第二间
4. 将其推广到一般情况,对于前i间房子,我们偷窃的方案有两种:
1. 偷窃第i间房子,得到的总金额是第i间房子的价值与偷窃前i