Tim Roughgarden Algorithms Illuminated (Part 3): Greedy Algorithms And Dynamic Programming