In [1]:
import Data.List
In [2]:
optimalTotalTime :: (Num a, Ord a) => [a] -> a
optimalTotalTime ts =
let computeState (bestTime, previousBestTime) nextTime =
(max bestTime (previousBestTime + nextTime), bestTime)
in fst $ foldl' computeState (0, 0) ts
In [3]:
optimalTotalTime [30, 15, 60, 75, 45, 15, 15, 45]