1、题目
给定一个数组,选择数字组成组合,请问哪个组合的累加和最大。
要求:相邻的数不能同时选。
例子:
输入:[3, 7, 9]
输出:12。选择 3 和 9
2、思路
定义dp[i]
,表示在 arr 的 0 ~ i i i 范围上按照选择数组成组合,累加和最大的结果,即所有可能性的最优。
dp[0]
就是在 arr 的 [0,0] 范围上选组合,因为只有一个数,所以 dp[0] = arr[0]
;
dp[1]
就是在 arr 的 [0, 1] 范围上选组合,但是因为不能选相邻,所以 dp[1] = max(arr[0], arr[1])
;
普遍情况dp[i]
,在 arr 的 [0, i] 范围上选择ÿ