Лучшие помощники
- Megamozg 2190 б
- Matalya1 1800 б
- DevAdmin 1690 б
- arkasha_bortnikov 860 б
- Dwayne_Johnson 845 б
20 октября 2023 10:23
119
скольким способами квадрат 17×17 можно разбить на прямоугольники, среди которых есть по два вертикальных и по два горизонтльных прямоугольника 1×16, 1×14, ... , 1×2 и один квадрат 1×1?
1
ответ
Для решения этой задачи можно использовать метод динамического программирования.
Пусть dp[i][j] - количество способов разбить квадрат i×j с учетом условий задачи.
Инициализируем dp[0][0] = 1, так как пустой квадрат можно разбить только одним способом - не разбивая его на прямоугольники.
Затем заполняем таблицу dp построчно, начиная с первой строки и до i = 17 и по столбцам, начиная с первого столбца и до j = 17.
Для каждой ячейки dp[i][j] есть несколько возможных способов разбить квадрат i×j:
1) Если i >= 2 и j >= 2, то можно разбить квадрат на две части: одну горизонтальную и одну вертикальную. Таким образом, к текущему значению dp[i][j] нужно добавить dp[i-1][j] * dp[i][j-1].
2) Если i >= 16 и j = 1, то можно разбить квадрат на одну горизонтальную часть размером 1×16 и одну вертикальную часть размером i×1. Таким образом, к текущему значению dp[i][j] нужно добавить dp[i-16][j].
3) Если i >= 14 и j = 1, то можно разбить квадрат на одну горизонтальную часть размером 1×14 и одну вертикальную часть размером i×1. Таким образом, к текущему значению dp[i][j] нужно добавить dp[i-14][j].
4) Продолжаем аналогично для других размеров прямоугольников 1×12, 1×10, 1×8, 1×6, 1×4 и 1×2.
5) Если i >= 1 и j = 1, то можно разбить квадрат на одну горизонтальную часть размером 1×1 и одну вертикальную часть размером i×1. Таким образом, к текущему значению dp[i][j] нужно добавить dp[i-1][j].
В результате, значение dp[17][17] будет содержать количество способов разбить квадрат 17×17 с заданными условиями.
Пусть dp[i][j] - количество способов разбить квадрат i×j с учетом условий задачи.
Инициализируем dp[0][0] = 1, так как пустой квадрат можно разбить только одним способом - не разбивая его на прямоугольники.
Затем заполняем таблицу dp построчно, начиная с первой строки и до i = 17 и по столбцам, начиная с первого столбца и до j = 17.
Для каждой ячейки dp[i][j] есть несколько возможных способов разбить квадрат i×j:
1) Если i >= 2 и j >= 2, то можно разбить квадрат на две части: одну горизонтальную и одну вертикальную. Таким образом, к текущему значению dp[i][j] нужно добавить dp[i-1][j] * dp[i][j-1].
2) Если i >= 16 и j = 1, то можно разбить квадрат на одну горизонтальную часть размером 1×16 и одну вертикальную часть размером i×1. Таким образом, к текущему значению dp[i][j] нужно добавить dp[i-16][j].
3) Если i >= 14 и j = 1, то можно разбить квадрат на одну горизонтальную часть размером 1×14 и одну вертикальную часть размером i×1. Таким образом, к текущему значению dp[i][j] нужно добавить dp[i-14][j].
4) Продолжаем аналогично для других размеров прямоугольников 1×12, 1×10, 1×8, 1×6, 1×4 и 1×2.
5) Если i >= 1 и j = 1, то можно разбить квадрат на одну горизонтальную часть размером 1×1 и одну вертикальную часть размером i×1. Таким образом, к текущему значению dp[i][j] нужно добавить dp[i-1][j].
В результате, значение dp[17][17] будет содержать количество способов разбить квадрат 17×17 с заданными условиями.
0
·
Хороший ответ
20 октября 2023 10:24
Остались вопросы?
Все предметы