A Beginner's Guide to Dynamic Programming