Pythonで区間スケジューリング問題

n個の仕事があります。各仕事は開始時刻と終了時刻を保持しています。各仕事について、参加するかしないかを選択します。
仕事に参加するならば、開始から終了まで参加しなければなりません。また参加する仕事の時間帯が重なってはいけません。
できるだけ多くの仕事に参加する場合、最大でいくつの仕事に参加することができるでしょうか

# coding=utf-8
# 区間スケジューリング問題
from datetime import datetime

class Work(object):
    def __init__(self, name, start_time, end_time):
        if type(start_time) == str:
            start_time = datetime.strptime(start_time, '%Y/%m/%d %H:%M:%S')
        if type(end_time) == str:
            end_time = datetime.strptime(end_time, '%Y/%m/%d %H:%M:%S')
        self.name = name
        self.start_time = start_time
        self.end_time = end_time

    def __repr__(self):
        return self.name


def solve(works):
    # 終了時間が早い順にソート
    works.sort(key=lambda x: x.end_time)

    selected_work = []
    current_time = None
    for work in works:
        if current_time is None or current_time < work.start_time:
            selected_work.append(work)
            current_time = work.end_time
    return selected_work

works = [Work('task1', '2012/12/09 11:00:00', '2012/12/09 13:00:00'),
         Work('task2', '2012/12/09 12:00:00', '2012/12/09 15:00:00'),
         Work('task3', '2012/12/09 14:00:00', '2012/12/09 17:00:00'),
         Work('task4', '2012/12/09 16:00:00', '2012/12/09 19:00:00'),
         Work('task5', '2012/12/09 18:00:00', '2012/12/09 20:00:00')]

selected_work = solve(works)

print selected_work
# => [task1, task3, task5]
print len(selected_work)
# => 3