华为OD统一考试 - 跳格子3
题目描述
小明和朋友们一起玩跳格子游戏,
每个格子上有特定的分数 score = [1, -1, -6, 7, -17, 7],
从起点score[0]开始,每次最大的步长为k,请你返回小明跳到终点 score[n-1] 时,能得到的最大得分。
输入描述
第一行输入总的格子数量 n
第二行输入每个格子的分数 score[i]
第三行输入最大跳的步长 k
输出描述
输出最大得分
备注
- 格子的总长度 n 和步长 k 的区间在 [1, 100000]
- 每个格子的分数 score[i] 在 [-10000, 10000] 区间中
示例1
输入: 6 1 -1 -6 7 -17 7 2 输出: 14 说明: 输出最大得分数,小明从起点score[0]开始跳,第一次跳score[1],第二次跳到score[3],第三次跳到score[5],因此得到的最大的得分是score[0] + score[1] + score[3] + score[5] = 14
import Foundation func ODTest_2_4() { print("第一行输入总的格子数量 n") let n = Int(readLine() ?? "") ?? 0 print("第二行输入每个格子的分数 score[i]") let score = (readLine() ?? "").split(separator: " ").map { Int($0) ?? 0 } print("第三行输入最大跳的步长 k") let k = Int(readLine() ?? "") ?? 0 // 格子的总长度 n 和步长 k 的区间在 [1, 100000] // 每个格子的分数 score[i] 在 [-10000, 10000] 区间中 if n < 1 || n > 10000 || k < 1 || k > 10000 || n != score.count || score.first(where: { $0 < -10000 || k > 10000 }) != nil { print("NULL") return } // dp[i] 表示跳到 score[i-1] 能得到的最大得分 var dp = Array(repeating: -10000, count: n) dp[0] = score[0] for i in 1 ..< n { for step in 1 ... k { let right = max(i - step, 0) dp[i] = max(dp[right] + score[i], dp[i]) } } print("输出最大得分") print(dp) print(dp[n - 1]) }
2024华为OD机试卷题 文章被收录于专栏
本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。