动态规划--最大连续子序列


如输入:

-2  11  -4  13  -5  -2

输出:

20

为:11+(-4)+13



package com.xjj.algorithm;

import java.util.Scanner;
/*----最大连续子序列和--动态规划----
 * 1.令dp[i]	为以 A[i] 结尾的的连续序列的最大和,必须以A[i]结尾;有A[i]结尾有如下两种情况:
 * 		a.以A[i]开始,以A[i]结束:其最大连续和为其本身;
 * 		b.从某个位置开始,以A[i]结束:最大连续和为	dp[i-1]+A[i];
 * 
 * 2.状态转移方程为:dp[i] = max(A[i], dp[i-1] + A[i]);
 * 3.边界dp[0] = A[0]:	递推--自底向上
 * 
 * 4.O(n)
 *
 * 
 * */
public class Max_sum {
	private static int n;
	
	public void sum(int[]  a){
		int[] dp = new int[n];
		//初始化并设置边界
		dp[0] = a[0];
		
		//遍历--状态转移
		for(int i = 1; i < n; i++)
			dp[i] = Math.max(a[i], dp[i-1] + a[i]);

		//找到和最大值
		int max = dp[0];
		for(int i = 1; i < n; i++)
			if (max < dp[i]) 
				max = dp[i];

		System.out.println(max);
	}

	public static void main(String[] args){
		System.out.println();
		Scanner scanner = new Scanner(System.in);
		n = scanner.nextInt();
		
		int[] a = new int[n];
		for(int i = 0; i < n; i++)
			a[i] = scanner.nextInt();
		Max_sum am = new Max_sum();
		am.sum(a);
			
	}
}

猜你喜欢

转载自blog.csdn.net/jiejiexiao/article/details/79657310