Задача о расстановке знаков в выражении — различия между версиями
|  (Новая страница: «'''Задача о расстановке знаков в выражении''' — задача о нахождении максимального значения …») | 
| (нет различий) | 
Версия 12:11, 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 | 
