1ETj

#!/usr/bin/python

process_times = [4, 3, 7, 2, 2]
due_times = [5, 6, 8, 8, 17]

def find_not_delayed(seq_prim, seq_prim_time):
    for task in seq_prim:
        if due_times[task]>=seq_prim_time:
            return task
    return None

queue = [(0, [])]
while queue:
    print queue
    bound, seq = queue.pop(0)
    if len(seq)>=len(process_times):
        break
    seq_prim = [task for task in range(len(process_times)) if task not in seq]
    seq_prim_time = sum(process_times[task] for task in seq_prim)
    task = find_not_delayed(seq_prim, seq_prim_time)
    if task is None:
        for task in seq_prim:
            queue.append((bound+seq_prim_time-due_times[task], [task]+seq))
    else:
        queue.append((bound, [task]+seq))
    queue.sort()
print seq