An Introduction to Dynamic Programming | Synapse