1. Какие задачи мы будем решать? NP. Ответ можно проверить за полиномиальное время.
2. Сведение задачи минимизации к такому виду. Найти путь min длины --> найти путь длины <= k.
3. Пусть существует алгоритм, решающий задачу размера n за O(T(n)), тогда есть программа S на python, работающая за O(T(n))
4. Алгоритм: будем перебирать X и запускать первых X программ с будильником X каждую. 
5. Оценим время работы. Optimize: вместо X -> X+1 делаем X -> 2X
