终于回到了过往,我们将重新走上 dp d p 这条路.
首先我们看这道题.
给出一串数列,求最大的子段和.
我们举个栗子.
7
1 2 3 -5 4 3 -6
这个样例的答案是8,前6个数相加是最大的.
显然本题是一个dp了.
定义dp[i]
为以第i个数结尾的最大子段和,最后把dp[1 to n]
全部处理一遍取其中的最大值即可.
/*
因为第i个数一定要取,所以前面必然会有一个问题:第i-1个数取不取?
那么显然如果前i-1个数的和<0,我们就不要它们,只取第i个数.
同理,如果在前面某一个位置p中有sum(a[1 to p-1])<0,前p-1个数就不要,接下来的答案就从第p个开始计数了.
那么我们可以推出状态的转移方程:dp[i]