title: Algorithm to fit as many events into a schedule as possible
body: <p>I'm trying to find an algorithm that can arrange as many of these non-overlapping events into a schedule as possible (where any of these events can be added or removed from the schedule as needed). None of these events can overlap, but I want to fit as many of them into a daily schedule as possible:</p>
  
  <pre><code>12:00 PM - 12:45 PM: Lunch
  
  1:00 AM - 3:00 AM: Math class 1
  
  3:30 PM - 5:00 PM: Math class 2
  
  7:00 PM - 10:00 PM: History class 1
  
  9:00 PM - 11:00 PM: History class 2
  
  Any time of day: Grocery shopping, 40 minutes
  
  Any time of day: Study math for 30 minutes
  
  Any time of day between 11:00 AM and 4:00 PM: Basketball practice for 2 hours
  </code></pre>
  
  <p>I've been thinking about this problem for a while, and I still have no idea about how I should solve it. What type of calendar-scheduling algorithm would be most effective in this case?</p>