【华为OD】2024年C卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
【华为OD】2024年C卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript-优快云博客
C++、Java、python、C代码:
【华为OD】C卷真题200分:跳格子三 C/C++代码实现[思路+代码]-优快云博客
【华为OD】C卷真题200分:跳格子三 Java代码实现[思路+代码]-优快云博客
【华为OD】C卷真题200分:跳格子三 python代码实现[思路+代码]-优快云博客
【华为OD】C卷真题200分:跳格子三 C语言代码实现[思路+代码]-优快云博客
题目描述:
小明和朋友们一起玩跳格子游戏,每个格子上有特定的分数,score[] = [1 -1 -6 7 -17 7],从起点score[0]开始,每次最大跳的步长为k,请你返回小明跳到终点score[n-1]时,能得到的最大得分 。
注:
- 格子的总长度和步长的区间在 [1, 100000];
- 每个格子的分数在[-10000, 10000]区间中;
输入描述
6 // 第一行输入总的格子数量
1 -1 -6 7 -17 7 // 第二行输入每个格子的分数score[]
2 // 第三行输入最大跳的步长k
输出描述
14 // 输出最大得分数,小明从起点score[0]开始跳,第一次跳score[1], 第二次跳到score[3],第三次跳到score[5],因此得到的最大的得分是score[0] + score[1] + score[3] + score[5] = 14
示例1
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
6
1 -1 -6 7 -17 7
2
输出
14
879
+---+
3 | | ++ + +---|
| | | 3 + 6 + | + | +
| + | | + + + | + | +
| + | +---+ + + +++++ + + + | +
| + | + | + +----+ | | + + + | +
| + 3 | + | + + + 2 | | 2 + + + | +
| + | + | + + + | | + + + | +
| +---+ + | | | + ----+ | +---+ | | + | +
| | + | | | + | | | | | | + | +
| 1 | + | 8 | | + 1 | | | 1 | | 1 | | + | +
| | + | | | + | | | | | | | + | +
| +---+ + +---+ | ++---+ ++ +---+ +---+ | + | +
| | + | | | ++ | | |+ | +
|0 | + | 0 | 0 | ++ | 0 | |+ | +
| | + | | | ++ | | |+ | +
+---+ + +-------+ +---+| +|+ | +
+ + | +
0 1 2 3 4 5 6 7 8 9 10 11 12 + v: w u m u 1 0 2 4
题目解析:
使用动态规划来实现
代码实现:
const readline = async () => (await iter.next()).value;
const rl = require("readline").createInterface({ input: process.stdin });
const iter = rl[Symbol.asyncIterator]();
function output(arr, n, k) {
let data = new Array(n); // 创建大小为n的数据数组
data[0] = arr[0]; // 将第一个元素赋给data的第一个元素
for (let i = 1; i < n; ++i) { // 从第二个元素开始遍历
let val = -Infinity; // 初始化val为负无穷大
let j = Math.max(0, i - k); // j的范围为i-k到i之间的最大值
for (; j < i; ++j) { // 在j到i之间找到data的最大值
val = Math.max(val, data[j]);
}
data[i] = val + arr[i]; // 计算当前位置的值
}
console.log(data[n - 1]); // 输出最终结果
rl.close();
}
async function main() {
const n = parseInt(await readline()); // 输入n
const arr = (await readline()).split(" ").map(Number); // 输入n个整数到arr中
const k = parseInt(await readline()); // 输入k
output(arr, n, k); // 调用输出函数
}
main();

华为OD2024年C卷编程挑战:动态规划解决跳格子游戏中的最大得分问题,
1200

被折叠的 条评论
为什么被折叠?



