Splines via dynamic programming