https://medium.com/@mhuzaifashaikh/dynamic-programming-and-graph-problems-the-cornerstones-of-leetcode-challenges-25b5b94ce251