There‘s a factory for cakes. Every day, the cost of producing a cake is different. The factory could produce as more as cakes in one day and the producing cost for cakes in the same day is the same. The shelf life for each cake is
s days and the storage fee for each cake is t dollars.
How to fulfill the customers‘ paying list with the minimum cost?
-----------------------------------------------------------------------------------
We could use a minimum queue to calculate the cost of day i+s as arr[i+s]. However, if we want to know arr[i+s+1], we have to refresh i+2 to i+s, i.e., we always calculates the minimum value of
a[i+1] + (s-1)t
a[i+2] + (s-2)t
a[i+3] + (s-3)t
....
a[i+s] + 0t
Actually, there is no need to refresh i+2 to i+s. Another way is to refresh a[1] to end with adding a list of nt, (n-1)t.....0t in the beginning. Then minimum queue could used later.