#3259
Medium Algorithms Maximum energy boost from two drinks
Array Dynamic Programming
50.0% acceptance
Feb 25, 2026
179
13
You are given two integer arrays energyDrinkA and energyDrinkB of length n.
You want to maximize total energy by drinking one drink per hour, but switching requires skipping one hour.
Return the maximum total energy boost in n hours.
Solution
Rust
Time O(n)
Space O(1)
impl Solution {
pub fn max_energy_boost(energy_drink_a: Vec<i32>, energy_drink_b: Vec<i32>) -> i64 {
let n = energy_drink_a.len();
// dp_A[i] = max energy if drinking A at hour i
// dp_A[i] = max(dp_A[i-1] + A[i], dp_B[i-2] + A[i]) (continue A, or switch from B skipping i-1)
// dp_B[i] = max(dp_B[i-1] + B[i], dp_A[i-2] + B[i])
let mut dpa = energy_drink_a[0] as i64;
let mut dpb = energy_drink_b[0] as i64;
let mut dpa2 = 0i64; // dp_A[i-2]
let mut dpb2 = 0i64; // dp_B[i-2]
for i in 1..n {
let a = energy_drink_a[i] as i64;
let b = energy_drink_b[i] as i64;
let new_dpa = (dpa + a).max(dpb2 + a);
let new_dpb = (dpb + b).max(dpa2 + b);
dpa2 = dpa;
dpb2 = dpb;
dpa = new_dpa;
dpb = new_dpb;
}
dpa.max(dpb)
}
}