#19289. 守卫长安
守卫长安
第一部分:背景知识讲解
1. 安史之乱与潼关之战
唐玄宗天宝年间,安禄山起兵叛乱,史称“安史之乱”。叛军攻陷洛阳后,目标直指大唐国都——长安。 长安东面的潼关是最后一道天险。为了守住潼关,唐军需要在沿途的险要地段修筑防御工事,层层阻击。
2. 掎角之势与补给线
在军事防御理论中,防线的布置很有讲究:
- 相互支援:据点之间要有一定的距离,以便形成战略纵深。
- 后勤压力:如果所有相邻的据点都驻扎重兵,会导致局部地区的粮草消耗过大,补给线拥堵(即“堵车”),反而影响战斗力。
- 最优策略:因此,兵部规定相邻的两个据点不能同时作为主力驻扎点,以分散后勤压力。
3. 算法模型:打家劫舍 (House Robber)
这道题的数学模型与经典的动态规划问题“打家劫舍”完全一致:在数组中选择若干个数,要求任意两个数不相邻,使得总和最大。这是线性 DP 的入门必修课。
第二部分:题目内容
题目名称:守卫长安 (Guarding Chang'an)
题目描述
通往长安的战略要道上分布着 个防御据点,按顺序编号为 到 。 经过勘探,第 个据点的战略价值为 ()。
唐军主力部队需要选择一部分据点进行驻扎。为了防止后勤补给线瘫痪,兵部制定了严格的驻扎规则: 任意两个被选中的据点,不能是相邻的。(例如:如果选择了第 号据点,就绝对不能选择第 号和第 号据点)。
请你制定一个驻扎方案,在遵守上述规则的前提下,使得被选中据点的战略价值之和最大。输出这个最大值。
输入格式
第一行包含一个正整数 ,表示据点的数量。
第二行包含 个非负整数 ,表示每个据点的战略价值。
输出格式
输出一行一个整数,表示能获得的最大战略价值总和。
输入输出样例 #1
输入:
4
1 2 3 1
输出:
4
样例 #1 解释:
- 选据点 1 和 3:价值 。(合法,最大)
- 选据点 2 和 4:价值 。
- 选据点 1 和 4:价值 。
输入输出样例 #2
输入:
5
2 7 9 3 1
输出:
12
样例 #2 解释: 最优方案是选择第 1、3、5 号据点。 总价值 。
数据范围
对于 的数据:
- 答案可能超过
int范围,请使用long long。