动态规划篇

动态规划解题一般分为3步:
1.表示状态
每一种状态都是使用数组的维数来表示的
一般我们会使用数组的第一位来表示阶段,然后再根据需要通过增加数组维数,来添加其它状态
2.找出状态转移方程
状态转移指的是,当前阶段的状态如何通过之前计算过的阶段状态得到
3.初始化边界
初始化边角状态,以及第一阶段的状态
参考连接:小小算法

53.最大子序和

给定一个整数数组nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),并返回其最大和。
首先是对这个问题进行阶段划分。我们可以把这个长度为 n 的数组划分为 n 个阶段,例如第 n 个阶段代表前 n 个元素的最大子序和,我们用 f(n) 来表示 。

使用数组的第一维来表示阶段:

f(n) 表示第 n 个阶段,也就是前 n 个元素的最大子序和。

f(n-1) 表示第 n-1 个阶段,也就是前 n-1 个元素的最大子序和。

……

仅仅表示了阶段 f(n) ,我们还是很难看出 f(n) 和 f(n-1) 之间的转移关系。因此我们需要再寻找对转移策略有影响的其它状态,我们发现 f(n-1) 到 f(n) 的转移策略与它们的结尾元素是否被选择有关,因此再添加一维来表示对应阶段结尾元素的选取状态。