#g6001. [GESP6级模拟题]选礼物

[GESP6级模拟题]选礼物

题目描述

nn 个礼物排成一排,每个礼物有一个快乐值 a[i]a[i]

小明想选一些礼物,但有两个相邻的礼物不能同时选(因为它们会"打架"而损坏)。

请问小明最多能获得的总快乐值是多少?

输入格式

第一行一个正整数 nn,表示礼物的个数。

第二行 nn 个整数 a[1],a[2],,a[n]a[1], a[2], \dots, a[n],表示每个礼物的快乐值。

输出格式

输出一个整数,表示能获得的最大总快乐值。

样例输入

5
3 2 5 4 1

样例输出

9

样例解释

选择第 11 个(快乐值 33)、第 33 个(快乐值 55)、第 55 个(快乐值 11), 总和 =3+5+1=9= 3 + 5 + 1 = 9,且它们互不相邻,这是最优方案。

数据范围与约定

对于 100%100\% 的数据,1n10001 \le n \le 10001a[i]100001 \le a[i] \le 10000

提示

  • 考虑用动态规划求解。定义 dp[i]dp[i] 表示前 ii 个礼物中能获得的最大快乐值。
  • 对于第 ii 个礼物,有两种选择:
    • 不选:则 dp[i]=dp[i1]dp[i] = dp[i-1]
    • :则第 i1i-1 个不能选,dp[i]=dp[i2]+a[i]dp[i] = dp[i-2] + a[i]
    • 取两者的较大值:dp[i]=max(dp[i1],dp[i2]+a[i])dp[i] = \max(dp[i-1], dp[i-2] + a[i])
  • 边界条件:dp[0]=0dp[0] = 0dp[1]=a[1]dp[1] = a[1]