Struggling to really understand dynamic programming