【LeetCode】每日一题 2024_11_1 超级饮料的最大强化能量(DP)

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:超级饮料的最大强化能量

代码与解题思路

先读题:

题目给了两个数组,长度为 n,题目要求在 n 个小时内选择饮料,一个小时可以选一瓶,如果要切换饮料类型需要花费一个小时,这样就会少选一个饮料

有两个需要分类讨论的地方:

第一个饮料可以从 A 开始,也可以从 B 开始

后续的饮料有两种情况,1、选择喝下一瓶饮料,2、选择不喝,进行饮料类型的切换

像这样选与不选的题目,可以用动态规划来实现,设 dp[i][0] 表示在第 i 小时选择能量饮料 A 获得的最大强化能量,定义 dp[i][1] 表示在第 i 小时选择能量饮料 B 获得的最大强化能量

代码如下:

go 复制代码
func maxEnergyBoost(energyDrinkA []int, energyDrinkB []int) int64 {
    n := len(energyDrinkA)
    dp := make([][2]int64, n+1)
    // 选 A 起手和选 B 起手两种情况
    dp[0][0], dp[0][1] = int64(energyDrinkA[0]), int64(energyDrinkB[0])
    for i := 1; i < n; i++ {
        dp[i][0] = max(dp[i-1][0]+int64(energyDrinkA[i]), dp[i-1][1])
        dp[i][1] = max(dp[i-1][1]+int64(energyDrinkB[i]), dp[i-1][0])
    }
    return max(dp[n-1][0], dp[n-1][1])
}

代码解释:

dp[i][0] = max(dp[i-1][0]+int64(energyDrinkA[i]), dp[i-1][1]) 中,dp[i-1][0]+int64(energyDrinkA[i]) 表示的就是继续选同一个类型的饮料,而 dp[i-1][1] 代表的是,选择从另一个类型的饮料转换到当前类型

举个例子,看示例二,类型 A 初始是 4,类型 B 初始是 1,第二瓶饮料的能量都是 1,那第二轮选择类型 B 的最大能量就是:第一轮先选 A,第二轮转换成 B,即代码中的 dp[i-1][0]。这样就能获得 4 点能量,如果两轮都选类型 B 只有 2 点能量

每天进步一点点,我们明天不见不散~

可以和我刷一辈子的每日一题吗?

一题一题,积累起来就是一辈子。

相关推荐
AC使者8 分钟前
#B1630. 数字走向4
算法
冠位观测者12 分钟前
【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序
数据结构·算法·leetcode
@小码农26 分钟前
202411 第十六届蓝桥杯青少组 STEMA 考试真题 汇总
职场和发展·蓝桥杯
古希腊掌管学习的神1 小时前
[搜广推]王树森推荐系统笔记——曝光过滤 & Bloom Filter
算法·推荐算法
qystca1 小时前
洛谷 P1706 全排列问题 C语言
算法
古希腊掌管学习的神1 小时前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
浊酒南街1 小时前
决策树(理论知识1)
算法·决策树·机器学习
就爱学编程1 小时前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
ProcessOn官方账号1 小时前
如何绘制网络拓扑图?附详细分类解说和用户案例!
网络·职场和发展·流程图·拓扑学
学术头条1 小时前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学