会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
算法类型:线性动态规划(两状态)
把每关看成一个点,从 1 号关卡出发每次只能向前走 1 关或 2 关,且不能连续两次走 2 关,要求恰好走到第 n 关并最大化经过关卡分值之和。这是一个典型的、带"上一次走了几关"记忆的路径 DP:
last1[i]:上一步走 1 关到达第 i+1 关时,能够得到的最大累加总分;
last2[i]:上一步走 2 关到达第 i+1 关时,能够得到的最大累加总分。
题目内容
山路一共设有 n 个关卡,按 1∼n 顺序排列。当前位于 1 号关卡,必须按照关卡从小到大闯关,且必须到达最后第 n 号关卡才算寻宝成功。每个关卡都有对应的宝藏分值(可能为负数),经过当前关卡即可获得该关卡分值,分数持续累加。
移动规则:
- 从当前关卡,下一次只能在前方 1 关或者 2 关处打卡;
- 限制规则:不能连续两次都一次性跳 2 关,违反该规则的路线无效;
请求出:所有合法路线中,能够收集到的最大累加总分。
输入描述
参数1:整数 n,代表关卡数量
参数2:整数数组,依次表示第 1∼n 关的宝藏分值
1≤n≤20
每关分值:−999≤val≤999
输出描述
输出一个整数,代表合法路线的最大累加得分。
样例1
输入
5,[10,5,8,3,15]
输出
41
说明
- 合法路线示例:1→2→3→4→5,无连续跳两关,总分:10+5+8+3+15=41
- 路线 1→3→5 连续两次跳 2 关,违规,不计入统计。
样例2
输入
4,[10,1,1,100]
输出
112
说明
- 路线 1→2→3→4 (1,1,1): 10+1+1+100=112
- 路线 1→3→4 (2,1): 10+1+100=111
- 路线 1→2→4 (1,2): 10+1+100=111
- 最大值 112。