Информация об изменениях

Сообщение Re[7]: Время черепахи от 02.07.2015 15:16

Изменено 02.07.2015 15:17 Кодт

S>>3) Рекурсивно находим максимальное число цветов, которое мы можем съесть на прямом пути при выбраном элементе k из S. Если оно равно (T'-t'[i])/d — то нашли, если меньше — запоминаем максимум и переходим к следующему элементу. Когда максимум будет больше либо равен (T'-t'[i])/d мы нашли решение.

К>Нет ли здесь претензии на всё тот же полный перебор?


А вот динамическое программирование тут появляется...

Для каждого цветка (#i) на прямом пути найдём
— минимальное время подхода к нему T[i,m] при котором черепаха успела съесть 0<=m<=i цветов
— соответственно, минимальное время ухода от него
— — если черепаха не ела этот цветок, Q[i,m] = T[i,m]
— — если осталась и съела, Q[i,m+1] = max(T[i,m],t[i]) + d

Для нулевого цветка, понятное дело, T[0,0] = 0.
Для всех последующих, T[i,m] = min(Q[j,m] | 0<=j<i)

Для последнего цветка # z=n-1 потратим время на обратный ход:
R[z,m] = Q[z,m] + d * (z-m)
Re[7]: Время черепахи
S>>3) Рекурсивно находим максимальное число цветов, которое мы можем съесть на прямом пути при выбраном элементе k из S. Если оно равно (T'-t'[i])/d — то нашли, если меньше — запоминаем максимум и переходим к следующему элементу. Когда максимум будет больше либо равен (T'-t'[i])/d мы нашли решение.

К>Нет ли здесь претензии на всё тот же полный перебор?


А вот динамическое программирование тут появляется...

Для каждого цветка (#i) на прямом пути найдём
— минимальное время подхода к нему T[i,m] при котором черепаха успела съесть 0<=m<=i цветов
— соответственно, минимальное время ухода от него
— — если черепаха не ела этот цветок, Q[i,m] = T[i,m]
— — если осталась и съела, Q[i,m+1] = max(T[i,m],t[i]) + d

Для нулевого цветка, понятное дело, T[0,0] = 0.
Для всех последующих, T[i,m] = min(Q[j,m] | 0<=j<i)

Для последнего цветка # z=n-1 потратим время на обратный ход:
R[m] = Q[z,m] + d * (z-m)

Наилучшее время — это min(R[m] | 0<=m<n)