https://medium.com/@rotarualexandruandrei94/how-to-solve-any-dynamic-programming-interview-question-part-1-b9ae9b1154b2