https://llego.dev/posts/dynamic-programming-python-technical-interview-guide/