Вы могли указать точные характеристики вашей конкретной проблемы, а также пределы для различных переменных и общие характеристики входных данных.
Без этого я предполагаю, что вы используете это определение:
Вы хотите минимизировать общее опоздание в одной задаче планирования машины с n независимыми заданиями, у каждого из которых есть время обработки и срок выполнения.
То, что вы хотите сделать, это подобрать подмножество заданий, чтобы они не перекрывались (доступно только одно устройство), и вы также можете выбрать порядок, в котором вы их выполняете, с соблюдением сроков исполнения.
Полагаю, первый шаг - сортировка по срокам. Похоже, что сортировать их по-другому не выгодно.
Далее осталось выбрать подмножество. Вот где динамическое программирование приходит на помощь. Я постараюсь описать состояние и рекурсивные отношения.
Состояние:
[current time][current job] = maximum number of jobs done
Отношение:
Вы либо обрабатываете текущее задание и звоните
f(current time + processing_time_of[current job],current job +1)
или вы пропустите процесс и позвоните
f(current time,current job +1)
наконец вы берете минимум этих двух значений, возвращаемых этими вызовами, и сохраняете его в состоянии
[current time][current job]
И вы начинаете рекурсию в момент 0 и задание 0.
Кстати, у жадного, кажется, все хорошо, проверьте это:
http://www.springerlink.com/content/f780526553631475/