Решение для динамического программирования для выбора активности
В16.1 An activity-selection problem
изIntroduction to Algorithm
решение динамического программирования для этой задачи было задано как
c [i, j] = 0, если S (i, j) пусто
c [i, j] = max {c [i, k] + c [k, j] + 1}, если S (i, j) не является пустым
гдеS(i, j)
обозначает набор действий, которые начинаются после действияa(i)
заканчивается и заканчивается до деятельностиa(j)
начинается, иc[i, j]
обозначает размер оптимального решения для множестваS(i, j)
Тем не менее, я думаю о другом более простом решении
c[i] = max { c[i - 1], c[f(i)] + 1 }
гдеf(i)
дает активность, которая совместима сa(i)
и имеет максимумзакончить время и заканчивать раньшеa(i)
начинается.
Будет ли это работать? Если да, то почему автор предоставляет это сложное решение. Если нет, то что мне не хватает?