https://3rdlayer.uk/posts/rl-03-dynamic-programming/
Reinforcement Learning Lecture 3: Dynamic Programming