Решение:
Данная задача решается динамическим программированием. Для нахождения максимальной и минимальной суммы необходимо пройти по всем возможным путям от левой нижней клетки до правой верхней, учитывая правила сбора монет и наличие стен.
Алгоритм:
- Создадим две матрицы такого же размера, как и входная таблица: одна для максимальных сумм (max_sum), другая для минимальных (min_sum).
- Инициализируем левую нижнюю ячейку (начало пути) в обеих матрицах, применяя правило сбора монет к значению в этой клетке входной таблицы.
- Заполняем первую строку и первый столбец матриц, учитывая только одно возможное направление движения (вправо для первой строки, вверх для первого столбца) и правила сбора монет.
- Для остальных ячеек матрицы max_sum, значение вычисляется как:
max(max_sum[i-1][j], max_sum[i][j-1]) + (текущая_монета_макс), где текущая_монета_макс — это значение монеты в текущей клетке, если оно нечётное, или половина, если чётное. - Для остальных ячеек матрицы min_sum, значение вычисляется как:
min(min_sum[i-1][j], min_sum[i][j-1]) + (текущая_монета_мин), где текущая_монета_мин — это значение монеты в текущей клетке, если оно нечётное, или половина, если чётное. - Учитываем стены: если из клетки нельзя попасть в соседнюю (из-за стены), то соответствующее направление не рассматривается при вычислении минимума/максимума.
- Максимальная сумма будет в правом верхнем углу матрицы max_sum, а минимальная — в правом верхнем углу матрицы min_sum.
Так как исходные данные (таблица с монетами и стенами) отсутствуют, решение будет представлено в виде алгоритма.
Ответ: Максимальная сумма, Минимальная сумма.