Dynamic Programming Problem Solving - from Starter to Expert (finished)