输入一个只含正数的数组,找到数组满足条件的元素的最大和,条件是:组成最大和的所有元素不能相邻,比如输入数组[1 2 4 1 7 8 3],返回15(1+4+7+3)

import java.util.Scanner;
/** * 数组中不相邻数字相加最大和 * */
public class DP1 {
   
    public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String[] s1 = s.split(" ");
        int[] arr = new int[s1.length];
        for (int i = 0; i <s1.length ; i++) {
   
            arr[i]=Integer.valueOf(s1[i]);
        }

        DP1 dp = new DP1();
        int res= dp.dp1(arr);
        System.out.println(res);

    }
	//动态规划,opt[i]表示到第i个数字的最大和
    public int dp1(int[] arr){
   
        int[] opt =new int[arr.length];
        opt[0] = arr[0];
        opt[1] = Math.max(arr[0],arr[1]);
        for (int i = 2; i <arr.length ; i++) {
   
        	//选第i个元素时,计算最大和,为第i个元素的值加第i-2个元素的最大和
            int a = opt[i-2]+arr[i];
            //不选第i个元素时,最大和为第i-1个元素的最大和
            int b = opt[i-1];
            //做选择,选择a,b中较大的方案
            opt[i] = Math.max(a,b);
        }
        return opt[arr.length-1];
    }
}