现在这篇是记录一下4.1的学习。今天还没开始。
这篇是关于简单的动态规划的题目,思路比较清晰类似。
在这里先说一下有关动态规划的四个步骤:
1.确定子问题
2.确定dp数组的递推关系(dp数组也叫子问题数组)
3.确定求解的计算顺序
4.空间优化(初学者可以不掌握,本篇中没有涉及)
接下来上第一道题,由打家劫舍引入门。
那么,首先按步骤来,第一步:确定子问题。
这道题的大问题是一夜之间偷n间房子的最大金额。
而现在要明确子问题,子问题是什么?我们要求的问题是可以通过子问题来得到的。
所以这道题中我们可以把范围缩小,先求k个房子的最大金额。而当k=n时就是题目所求内容了。
现在开始求解第二步:确定子问题的递推关系。
在本题中,还是比较容易找到的。dp[k]就是dp[k-1](不打劫第k间房子)与dp[k-2]+nums[k-1](打劫第k间房子)的最大值了。
就到了第三步:确定dp数组的计算顺序。
还是能够清晰知道是从左往右的,先计算打劫较小的房子,一直到n个房子为止。
至此,就可以写出代码了。
接下来是一道打家劫舍的拓展题。
就是由一排过来变成了房子是围着的而已。那么可以拆开来求解(打了第一间就不打最后一间或者不打第一间),就变成单排求解,和上面一道题一样了。
最后还有一道类似的题目,学会上面两道题目之后,这道题就差不多了。
不过这里是从问题0开始的,和上面的顺序是相反的,知道这个思路之后就很好做了。