Задача о расстановке знаков в выражении — различия между версиями
RDmitriy (обсуждение | вклад) |
(→Решение) |
||
Строка 4: | Строка 4: | ||
Данная задача решается с использованием принципа оптимальности на подотрезке. Введём матрицу <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>. | Данная задача решается с использованием принципа оптимальности на подотрезке. Введём матрицу <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 | + | * <tex>d[i][i] = a_i </tex><br /> |
* <math>d[i][j] = \max_{\mathop{k = i..j-1}}[\max(d[i][k]+d[k+1][j], d[i][k]*d[k+1][j])] \ (i < j)</math> <br /> | * <math>d[i][j] = \max_{\mathop{k = i..j-1}}[\max(d[i][k]+d[k+1][j], d[i][k]*d[k+1][j])] \ (i < j)</math> <br /> | ||
Вычислим элементы таблицы <tex>d</tex>, тогда ответом на задачу будет значение <tex>d[1][n]</tex>. | Вычислим элементы таблицы <tex>d</tex>, тогда ответом на задачу будет значение <tex>d[1][n]</tex>. |
Версия 23:20, 3 декабря 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 |