Python 3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> # Считываем входные данные
... h, w = map(int, input().split())
... 
... # Создаем массив для динамического программирования
... dp = [[0] * (w + 1) for _ in range(h + 1)]
... 
... # Проходим по всем возможным размерам площадки
... for i in range(1, h + 1):
...     for j in range(1, w + 1):
...         # Инициализируем максимальную суммарную площадь ковров
...         max_area = 0
...         # Перебираем все возможные размеры ковра, который будет лежать на верхнем слое
...         for n in range(1, i + 1):
...             for m in range(1, j + 1):
...                 # Проверяем, что ковер не больше площадки
...                 if n * m <= i * j:
...                     # Вычисляем оставшуюся площадь после укладки ковра
...                     remain = dp[i - n][j] + dp[n][j - m]
...                     # Обновляем максимальную суммарную площадь ковров
...                     max_area = max(max_area, n * m + remain)
...         # Записываем результат в массив
...         dp[i][j] = max_area
... 
... # Выводим ответ
... print(dp[h][w])
