Это головоломка, основанная на Tetris. В этой головоломке нам даются последовательности следующих n частей, которые будут падать сверху. Наша задача - максимизировать счет до его GameOver. Не существует полиномиального алгоритма времени, известного для общего тетриса, но в этой головоломке допускаются только я (прямые) тетроминоны. Хотя его не разрешают вращать.
Итак, вот ограничения:
- Плата представляет собой прямоугольник W x H
- Нам даны последовательности следующих n тетроминонов
- Разрешены только тетроминоны (горизонтальные или вертикальные)
- Вращение ролика не разрешено
- Строки очищаются по мере их заполнения.
- Совет изначально пуст.
- 1 балл присваивается за очищенную строку.
- Игра заканчивается, когда тетроминоны складываются вверху игрового поля.
Найдите максимальный результат, который можно получить.
Пример:
8 x 6 доска. Следующие 7 тетроминонов [——,|,|,——,|,——,|]
, где '——'
представляет горизонтальный я tetramino и |
представляет вертикальный я tetramino.
Максимально возможная оценка в этом случае равна 3, используя следующую стратегию ('.'
представляет собой пустую доску, '#'
представляет собой часть тетрамино).
Initially:
........
........
........
........
........
........
1st move:
........
........
........
........
........
####....
2nd Move:
........
........
.......#
.......#
.......#
####...#
3rd Move:
........
........
......##
......##
......##
####..##
4th Move:
........
........
......##
......##
####..##
####..##
5th Move:
........
........
.....###
.....###
####.###
####.###
6th Move:
........
........
.....###
####.###
####.###
####.###
7th Move:
........
........
....####
########
########
######## // bottom 3 rows are cleared so score is 3
final state:
........
........
........
........
........
....####
Даже лучший алгоритм, который я мог бы получить, занимает экспоненциальное время, когда я сохраняю состояние верхнего уровня текущей платы (то есть, насколько высок каждый столбец). Таким образом, этот алгоритм займет время O((H^W)*n)
, так как для каждого столбца есть H возможностей для высоты.
Можно ли это решить в полиномиальное время с помощью динамического программирования или какого-нибудь жадного алгоритма?