Задача о расстановке знаков в выражении — различия между версиями
Proshev (обсуждение | вклад) |
Дмитрий (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
== Решение == | == Решение == | ||
− | Данная задача решается с использованием принципа оптимальности на подотрезке. Введём матрицу <tex>d</tex> размером <tex>n \times n</tex>, где <tex>d[i][j]</tex> будет равен максимальному значению, достигаемому на подотрезке <tex dpi = "130">a_i, a_{i+1}, \dots, a_j</tex>. | + | Данная задача решается с использованием принципа оптимальности на подотрезке[http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5#.D0.9F.D1.80.D0.B8.D0.BD.D1.86.D0.B8.D0.BF_.D0.BE.D0.BF.D1.82.D0.B8.D0.BC.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B8_.D0.BD.D0.B0_.D0.BF.D0.BE.D0.B4.D0.BE.D1.82.D1.80.D0.B5.D0.B7.D0.BA.D0.B0.D1.85]. Введём матрицу <tex>d</tex> размером <tex>n \times n</tex>, где <tex>d[i][j]</tex> будет равен максимальному значению, достигаемому на подотрезке <tex dpi = "130">a_i, a_{i+1}, \dots, a_j</tex>. |
Получаем следующие соотношения: <br /> | Получаем следующие соотношения: <br /> | ||
* <tex>d[i][i] = a_i </tex><br /> | * <tex>d[i][i] = a_i </tex><br /> | ||
Строка 37: | Строка 37: | ||
== Источники == | == Источники == | ||
* Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 15. Динамическое программирование // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4 | * Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 15. Динамическое программирование // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4 | ||
− | * | + | * |
[[Категория:Дискретная математика и алгоритмы]] | [[Категория:Дискретная математика и алгоритмы]] | ||
[[Категория:Динамическое программирование]] | [[Категория:Динамическое программирование]] |
Версия 19:35, 19 декабря 2013
Задача о расстановке знаков в выражении — задача о нахождении максимального значения выражения, полученного расстановкой знаков
и скобок в последовательности .Содержание
Решение
Данная задача решается с использованием принципа оптимальности на подотрезке[1]. Введём матрицу размером , где будет равен максимальному значению, достигаемому на подотрезке .
Получаем следующие соотношения:
Вычислим элементы таблицы
, тогда ответом на задачу будет значение .Реализация
// 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