输入一个只含正数的数组,找到数组满足条件的元素的最大和,条件是:组成最大和的所有元素不能相邻,比如输入数组[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];
}
}