#19289. 守卫长安

守卫长安

第一部分:背景知识讲解

1. 安史之乱与潼关之战

唐玄宗天宝年间,安禄山起兵叛乱,史称“安史之乱”。叛军攻陷洛阳后,目标直指大唐国都——长安。 长安东面的潼关是最后一道天险。为了守住潼关,唐军需要在沿途的险要地段修筑防御工事,层层阻击。

2. 掎角之势与补给线

在军事防御理论中,防线的布置很有讲究:

  • 相互支援:据点之间要有一定的距离,以便形成战略纵深。
  • 后勤压力:如果所有相邻的据点都驻扎重兵,会导致局部地区的粮草消耗过大,补给线拥堵(即“堵车”),反而影响战斗力。
  • 最优策略:因此,兵部规定相邻的两个据点不能同时作为主力驻扎点,以分散后勤压力。

3. 算法模型:打家劫舍 (House Robber)

这道题的数学模型与经典的动态规划问题“打家劫舍”完全一致:在数组中选择若干个数,要求任意两个数不相邻,使得总和最大。这是线性 DP 的入门必修课。


第二部分:题目内容

题目名称:守卫长安 (Guarding Chang'an)

题目描述

通往长安的战略要道上分布着 NN 个防御据点,按顺序编号为 11NN。 经过勘探,第 ii 个据点的战略价值ViV_iVi0V_i \ge 0)。

唐军主力部队需要选择一部分据点进行驻扎。为了防止后勤补给线瘫痪,兵部制定了严格的驻扎规则: 任意两个被选中的据点,不能是相邻的。(例如:如果选择了第 ii 号据点,就绝对不能选择第 i1i-1 号和第 i+1i+1 号据点)。

请你制定一个驻扎方案,在遵守上述规则的前提下,使得被选中据点的战略价值之和最大。输出这个最大值。

输入格式

第一行包含一个正整数 NN,表示据点的数量。

第二行包含 NN 个非负整数 V1,V2,,VNV_1, V_2, \dots, V_N,表示每个据点的战略价值。

输出格式

输出一行一个整数,表示能获得的最大战略价值总和。

输入输出样例 #1

输入:

4
1 2 3 1

输出:

4

样例 #1 解释:

  • 选据点 1 和 3:价值 1+3=41 + 3 = 4。(合法,最大)
  • 选据点 2 和 4:价值 2+1=32 + 1 = 3
  • 选据点 1 和 4:价值 1+1=21 + 1 = 2

输入输出样例 #2

输入:

5
2 7 9 3 1

输出:

12

样例 #2 解释: 最优方案是选择第 1、3、5 号据点。 总价值 =2+9+1=12= 2 + 9 + 1 = 12

数据范围

对于 100%100\% 的数据:

  • 1N1061 \le N \le 10^6
  • 0Vi1090 \le V_i \le 10^9
  • 答案可能超过 int 范围,请使用 long long