activity selection problem dynamic programming