Сообщение 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)
К>Нет ли здесь претензии на всё тот же полный перебор?
А вот динамическое программирование тут появляется...
Для каждого цветка (#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)
К>Нет ли здесь претензии на всё тот же полный перебор?
А вот динамическое программирование тут появляется...
Для каждого цветка (#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)