A Network Flow Dynamic Programming Algorithm for Complex Water Reservoir Problems