关于动态规划的相关理解我在上一篇博客动态规划基础01---最长递增子序列中写过,这一篇我们主要练习类似的dp算法题。
题1.对于包含任意正负数的整型数组,求它的最大连续子序列和。比如说,数组array={1,2,3,-7,4,5,6},则它的最大连续子序列为4,5,6,和为15.
首先还是先分析题目的状态转移方程,设maxCur[i]为前i个数字的最大连续子序列和,则
当 maxCur[i-1]<=0时,maxCur[i]=array[i];
当maxCur[i-1]>0时,maxCur[i]=maxCur[i-1]+array[i].
本题没有需要特别注意的边界条件,根据上述方程,相应java代码如下:
public class DP2 {
/**
* @param wj
*/
//最大连续子序列和
public static int func(int[] array){
int length=array.length;
if(length==1) return array[0];
int[] maxCur=new int[length];//保存当前最大子序列和
maxCur[0]=array[0];//第一个元素初始化
int maxSum=array[0];//最大值的初始化
for(int i=1;i<length;i++){
if(maxCur[i-1]<=0){
maxCur[i]=array[i];
}else{
maxCur[i]=maxC