package main func MaximumRobots(chargeTimes []int, runningCosts []int, budget int64) int { l := len(chargeTimes) if l != len(runningCosts) { return 0 } prevCharges := make([]int, l) prevCosts := make([]int, l) maxWndRobots := make([]int, l+1) maxRobots := 0 for wnd := 1; wnd <= l; wnd++ { windows := l - wnd + 1 begin := 0 end := wnd - 1 for w := 0; w < windows; w++ { m := chargeTimes[end] if m > prevCharges[w] { prevCharges[w] = m } prevCosts[w] += runningCosts[end] totalCost := int64(wnd*prevCosts[w] + prevCharges[w]) if totalCost <= budget { maxRobots = wnd } begin++ end++ } maxWndRobots[wnd] = maxRobots if maxWndRobots[wnd] == maxWndRobots[wnd-1] { break } } return maxRobots }