Задача о расстановке знаков в выражении — различия между версиями
RDmitriy (обсуждение | вклад) |
|||
Строка 34: | Строка 34: | ||
| i = 4 || 0 || 0 || 0 || 2 | | i = 4 || 0 || 0 || 0 || 2 | ||
|} | |} | ||
+ | |||
+ | == Источники == | ||
+ | * Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 15. Динамическое программирование // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4 | ||
+ | * [http://ru.wikipedia.org/wiki/Динамическое_программирование Википедия] |
Версия 02:30, 4 декабря 2010
Задача о расстановке знаков в выражении — задача о нахождении максимального значения выражения, полученного расстановкой знаков
и скобок в последовательности .Содержание
Решение
Данная задача решается с использованием принципа оптимальности на подотрезке. Введём матрицу
Вычислим элементы таблицы
, тогда ответом на задачу будет значение .Реализация
// d - матрица как в описании; a - последовательность из n элементов; i, j, k - счётчики for i := 1 to n do d[i][i] := a[i]; for i := n - 1 downto 1 do for j := i + 1 to n do for k := i to j - 1 do d[i][j] := max(d[i][j], max(d[i][k] + d[k+1][j], d[i][k] * d[k+1][j])); write(d[1][n]); // вывод ответа
Пример
Пусть дана последовательность 2, 1, 1, 2. Таблица
для неё будет выглядеть так:j = 1 | j = 2 | j = 3 | j = 4 | |
i = 1 | 2 | 3 | 4 | 9 |
i = 2 | 0 | 1 | 2 | 4 |
i = 3 | 0 | 0 | 1 | 3 |
i = 4 | 0 | 0 | 0 | 2 |
Источники
- Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 15. Динамическое программирование // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4
- Википедия