dynamic programming (GrHDP)