Изменения

Перейти к: навигация, поиск

Convex hull trick

18 байт добавлено, 01:08, 18 января 2017
Ключевая идея оптимизации
1) Сделаем замену обозначений. Давайте обозначим <tex>dp[j]</tex> за <tex>b[j]</tex>, <tex>a[i]</tex> за <tex>x[i]</tex>, а <tex>c[j]</tex> за <tex>k[j]</tex>.
2) Теперь формула приняла вид <tex>dp[i] = \min\limits_{j=0...i-1}(k[j]*\cdot x[i] + b[j])</tex>. Выражение <tex>k[j]*\cdot x + b[j]</tex> - это в точности уравнение прямой вида <tex>y = kx + b</tex>.
3) Сопоставим каждому <tex>j</tex>, обработанному ранее, прямую <tex>y[j](x) = k[j]*\cdot x + b[j]</tex>. Из условия «<tex>c[i]</tex> убывают <tex>\Leftrightarrow k[j]</tex> уменьшаются с номером <tex>j</tex>» следует то, что прямые, полученные ранее отсортированы в порядке убывания углового коэффициент. Давайте нарисуем несколько таких прямых :
[[Файл:picture1convexhull.png]]
Анонимный участник

Навигация