На сколько способов можно разбить доску размером 2020*2019 (2020 строк и 2019 столбцов) на прямоугольники 3*2 таким

На сколько способов можно разбить доску размером 2020*2019 (2020 строк и 2019 столбцов) на прямоугольники 3*2 таким образом, чтобы каждая строка доски пересекала одинаковое количество вертикально расположенных прямоугольников 3*2? (Прямоугольники 3*2 можно поворачивать. Каждый вертикально расположенный прямоугольник 3*2 должен быть содержаться в двух столбцах и в трех строках.) Ответите на задание из олимпиадной работы.
Егор

Егор

Для решения этой задачи воспользуемся методом динамического программирования. План решения будет заключаться в следующих шагах:

1. Необходимо разбить доску на ячейки размером 3×2 таким образом, чтобы каждая строка доски пересекала одинаковое количество прямоугольников. Заметим, что количество столбцов (2019) не делится нацело на 3. Поэтому нам потребуется добавить один столбец в начало или в конец доски и заполнить его специальным образом (проиллюстрировано ниже).

2. Создадим двумерный массив dp размером (2021 × 2019), где dp[i][j] будет обозначать количество способов разбить доску размером i × j на прямоугольники 3×2.

3. Инициализируем начальные значения:
- dp[0][0] = 1, так как пустая доска имеет один способ разбиения.
- dp[1][0] = 0, так как одна строка не может быть разбита на прямоугольники 3×2.
- dp[0][k] = 0 для всех k > 0, так как нет возможности разбить пустую строку.
- dp[1][k] = 0 для всех k > 0, так как одна строка не может быть разбита на прямоугольники 3×2.

4. Заполним массив dp построчно, начиная с 2-ой строки:
- Для каждого 2 ≤ i ≤ 2020 и 0 ≤ j ≤ 2019:
- Если i не делится на 3:
- dp[i][j] = dp[i-1][j-2] + dp[i-2][j-2] + dp[i-3][j-2].
- Иначе, если i делится на 3:
- dp[i][j] = 2 * dp[i-1][j-2] + dp[i-2][j-2] + dp[i-3][j-2].

5. Исходный ответ на задачу будет находиться в ячейке dp[2020][2019].

Описанный алгоритм позволяет эффективно решить данную задачу и найти количество способов разбить доску на требуемые прямоугольники. Ответ на задачу из олимпиадной работы будет содержаться в ячейке dp[2020][2019].
Знаешь ответ?
Задать вопрос
Привет!
hello