题目描述:
1. 一个整数数组L,如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。例如,对于L=[2,-3,3,50], 输出52(分析:很明显,该列表最大非连续子序列为[2,50])。测试例子:L=[-2,-3,3,50,1,-1,100] 。
用动态规划的思想:
public class MaxSubSum { public static int maxSubSum(int[] a) { a[1] = Math.max(a[1],a[0]); for (int i = 2; i < a.length; i++) { a[i]= Math.max(Math.max(a[i],a[i-1]),a[i-2]+a[i]); } return a[a.length-1]; } public static void main(String[] args) { int [] a= {2,-3,3,50}; int [] b= {-2,-3,3,50,1,-1,100}; int result_a = maxSubSum(a); int result_b = maxSubSum(b); System.out.println(result_a); System.out.println(result_b); } }