package com.algorithm.dynamicprogramming;
/**
* 算法描述:在数组中取出一个或多个不相邻数,使其和最大,即找到max(不相邻元素组成的子数组)。
* @author rich
*
*/
public class MaxNonAdjacentSum {
public static void main(String[] args) {
int[] arrs = new int[] {1,7,4,1,7,8,3};
System.out.println(maxNonAdjacentSum(6,arrs));
}
/**
* 算法分析:当n == 0 或者 n == 1没有可相加的数据,直接返回
* 否则对于arrs[n]有两种状态,要么相加 arrs[n]+maxNonAdjacentSum(n-2,arrs)
* 要么不相加maxNonAdjacentSum(n-1,arrs)
* 比较两个最大值
* @param n
* @param arrs
* @return
*/
public static int maxNonAdjacentSum(int n,int[] arrs) {
if (n == 0 || n == 1) return arrs[n];
// 不想加,相加
return Math.max(maxNonAdjacentSum(n-1,arrs), arrs[n]+maxNonAdjacentSum(n-2,arrs));
}
}