C解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

JS解法

选择当前卡牌: 如果选择当前卡牌,就需要加上当前卡牌的得分,然后递归计算从当前卡牌的前一张开始的最大得分。
跳过当前卡牌: 如果跳过当前卡牌,必须跳过至少 2 张卡牌,即从 currentRound-3 开始递归计算。
为了避免重复计算,我们可以使用 记忆化递归(Memoization) 来存储已经计算过的子问题的结果,从而提升效率。

思路概述:
使用递归函数 maxScore(points, currentRound) 计算从 currentRound 开始到最后一张卡牌的最大得分。
如果当前卡牌已被计算过,则直接从 memo 中获取结果。
对于每张卡牌,有两种选择:选择当前卡牌或者跳过当前卡牌。
将每次计算的结果存入 memo,以避免重复计算,提高效率

'use strict';

// 创建一个 Map 来存储已经计算过的结果(记忆化)
const memo = new Map();

// 递归函数:计算从 currentRound 开始的最大得分
const maxScore = (points, currentRound) => {
    // 如果当前回合小于 0,表示没有卡牌可以选择,返回 0
    if (currentRound < 0) {
        return 0;
    }

    // 如果当前回合已经计算过结果,直接从 memo 中返回
    if (memo.has(currentRound)) {
        return memo.get(currentRound);
    }

    // 选择当前卡牌:当前卡牌得分 + 从 currentRound-1 继续计算最大得分
    const choose = points[currentRound] + maxScore(points, currentRound - 1);

    // 跳过当前卡牌:跳到 currentRound-3 继续计算最大得分
    // 如果 currentRound 小于 3,跳过卡牌就相当于返回 0
    const skip = currentRound < 3 ? 0 : maxScore(points, currentRound - 3);

    // 当前回合的最大得分是选择当前卡牌和跳过当前卡牌中的最大值
    const result = Math.max(choose, skip);

    // 将当前回合的最大得分保存到 memo 中
    memo.set(currentRound, result);

    // 返回当前回合的最大得分
    return result;
};

// 主程序:处理输入并调用 maxScore 函数
const main = () => {
    // 让 stdin 持续接收输入数据
    process.stdin.resume();
    process.stdin.setEncoding('utf-8');

    let input = '';
    
    // 接收每次输入的块数据
    process.stdin.on('data', (chunk) => {
        input += chunk;
    });

    // 输入结束时调用回调函数
    process.stdin.on('end', () => {
        // 处理输入,去除两端空格,并按逗号分割,转换为数字数组
        const points = input.trim().split(',').map(Number);
        
        // 调用 maxScore 函数,从最后一张卡牌开始,计算最大得分
        console.log(maxScore(points, points.length - 1));
    });
};

// 执行主函数
main();

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/145099435"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!