46 lines
766 B
Go
46 lines
766 B
Go
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
|
|
}
|