当前位置: 首页 > article >正文

力扣(leetcode)每日一题 3259 超级饮料的最大强化能量|动态规划

3259. 超级饮料的最大强化能量

题干

来自未来的体育科学家给你两个整数数组 energyDrinkAenergyDrinkB,数组长度都等于 n。这两个数组分别代表 A、B 两种不同能量饮料每小时所能提供的强化能量。

你需要每小时饮用一种能量饮料来 最大化 你的总强化能量。然而,如果从一种能量饮料切换到另一种,你需要等待一小时来梳理身体的能量体系(在那个小时里你将不会获得任何强化能量)。

返回在接下来的 n 小时内你能获得的 最大 总强化能量。

注意 你可以选择从饮用任意一种能量饮料开始。

示例 1:

**输入:**energyDrinkA = [1,3,1], energyDrinkB = [3,1,1]

**输出:**5

解释:

要想获得 5 点强化能量,需要选择只饮用能量饮料 A(或者只饮用 B)。

题解

当要切换路线的时候,付出的代价是这个格子的饮料无法获取

直接憋动态规划,当前依赖上一个位置


    public static long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {
        int length = energyDrinkA.length;
        long[][] dp = new long[length + 1][2];
        // 0为a分支   1为b分支
        for (int index = length - 1; index >= 0; index--) {
            long tmp1 = dp[index + 1][0] + energyDrinkA[index]; // 还是选择a分支
            long tmp2 = dp[index + 1][1];  // 切换到b分支 当前小时无法获取能量
            dp[index][0] = Math.max(tmp2, tmp1);

            long tmp3 = dp[index + 1][1] + energyDrinkB[index];// 还是选择b分支
            long tmp4 = dp[index + 1][0]; 切换到a分支 当前小时无法获取能量
            dp[index][1] = Math.max(tmp3, tmp4);


        }
        return Math.max(dp[0][0], dp[0][1]);
    }

进行一下优化,节省内存空间,写法抽象些

    public static long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {
        int length = energyDrinkA.length;
        long aBranch = 0;
        long bBranch = 0;
        long tmp;
        for (int index = length - 1; index >= 0; index--) {
            tmp = aBranch;
            aBranch = Math.max(aBranch + energyDrinkA[index], bBranch);
            bBranch = Math.max(bBranch + energyDrinkB[index], tmp);
        }
        return Math.max(aBranch, bBranch);
    }

总结

常规的动态规划题目


http://www.kler.cn/a/378404.html

相关文章:

  • Android亮屏Job的功耗优化方案
  • leetcode hot100【LeetCode 3. 无重复字符的最长子串】java实现
  • Pinia-状态管理
  • 看门狗有什么用?
  • 基于python的机器学习(二)—— 使用Scikit-learn库
  • LeetCode 0685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图)
  • 偏差与方差的基本概念
  • guit fok 更新代码
  • 使用 OpenCV 进行人脸检测
  • 基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)
  • 【云原生】Docker搭建开源翻译组件Deepl使用详解
  • k8s-实战——ES集群部署
  • 实战OpenCV之目标检测
  • 基于SpringBoot+Vue的快递物流信息查询系统设计与实现【前后端分离】
  • 生成式语言模型的文本生成评价指标(从传统的基于统计到现在的基于语义)
  • FPGA(现场可编程门阵列)的时序分析
  • C语言化简分数
  • ROUGE 指标 (Recall-Oriented Understudy for Gisting Evaluation)
  • 完美日记营销模式对开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序的启示
  • c怎么与python交互
  • debian11安装最新rabbitmq
  • excel自定义导出实现(使用反射)
  • Qt 最小化,最大化,关闭窗口
  • Pytest-Bdd-Playwright 系列教程(4):基于敏捷的通用步骤定义
  • 【已解决】群晖docker无法删除容器 “Error response from daemon: container” 终极解决办法
  • AUTOSAR CP MCAL微控制器抽象层介绍