Изменения

Перейти к: навигация, поиск
Решение за время O(N2)
==Решение за время O(N<sup>2</sup>)==
Пусть теперь Модифицируем предыдущее решение, добавив небольшую "хитрость". Теперь <tex> d[i][j] </tex> - это длина наибольшей общей возрастающей подпоследовательности префиксов <tex> a[1..i] </tex> и <tex> b[1..j] </tex> (элементы , причем элемент <tex> ab[ij] </tex> и - последний представитель НОВП, а <tex> ba[ji] </tex> могут может не входить в НОВП)быть таковым. Вычислять <tex> d </tex> будем всё так же: по увеличению <tex> i </tex>, а при равенстве - по увеличению <tex> j </tex>. Заметим, что в предыдущем решении при каждом равенстве элементов Тогда для очередного значения <tex> d[i][j] </tex> существу два варианта:*<tex> a[i] </tex> и не входит в НОВП. Тогда <tex> bd[i][j] = d[i-1][j] </tex> приходилось пробегать дополнительным циклом по массиву : значение динамики уже посчитано на префиксе <tex> a [1..i-1] </tex> в поисках элемента, меньшего .*<tex> a[i] </tex>, для которого входит в НОВП. Тогда в префиксе <tex> d[k]b[1..j] </tex> на префиксе нужно найти элемент <tex> b[k] = a[1..ki] </tex> и , для которого <tex> bd[i-1..j] [k] \rightarrow max </tex> была наибольшей. А раз мы считаем <tex> d </tex> сначала по увеличению <tex> i </tex>, то будем считать <tex> a[i] </tex> можно считать ''фиксированным'', а . Чтобы не запускать цикл при каждом равенстве <tex> a[i] </tex> элементу <tex> b[jk] </tex> - ''переменным''. Будем , в дополнительной переменной <tex> best </tex> будем хранить "лучший" элемент (и его индекс <tex> best </tex>_<tex>ind </tex> в массиве <tex> b </tex>) такой, что этот элемент строго меньше <tex> a[i] </tex> и значение динамики для него максимально. Фактически, это решение отличается от предыдущих только более "хитрой" реализацией.
vector<int> '''LCIS'''(vector<int> a, vector<int> b)
Анонимный участник

Навигация