Изменения

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

Задача о наибольшей общей возрастающей последовательности

Нет изменений в размере, 14:49, 29 декабря 2013
Решение за время O(N2)
'''if''' a[i] == b[j] '''and''' d[i-1][j] < best + 1 // используем a[i]-й элемент для увеличения НОВП
d[i][j] = best + 1
pprev[j] = ind
'''if''' a[i] > b[j] '''and''' d[i-1][j] > best // при следующем равенстве a[i] == b[j']
best = d[i-1][j] // в best будет храниться "лучший" элемент:
ind = j // b[best_indind] < b[j'] и d[i][best_indind] - максимальна<tex> \rightarrow </tex> max
// восстановление (по массиву b)
b_j pos = 1 // ищем лучший элемент d[n][b_jpos]<tex> \rightarrow </tex> max
'''for''' j = 1...m
'''if''' d[n][b_jpos] < d[n][j] b_j pos = j
vector<int> answer
'''while''' pos != b_j 0 //проходим по массиву b, выписывая элементы НОВП '''while''' pos != 0
answer.push(b[pos])
pos = prev[pos]
Анонимный участник

Навигация