这是一个基于俄罗斯方块的难题。在这个难题中,我们会得到下降的n个方块序列,我们的任务是在GameOver之前最大化得分。对于一般俄罗斯方块问题没有已知的多项式时间算法,但是在这个难题中只允许I型(直线型)方块,不能旋转。
以下是限制条件:
- 棋盘是W x H的矩形
- 我们得到接下来n个方块的序列
- 只有I型方块(水平或垂直)被允许
- 无法旋转方块
- 当行被填满时就会被清除
- 棋盘最初是空的
- 每行清除获得1分
- 当方块堆叠到游戏区域顶部时,游戏结束
找出可以获得的最高分数。
例子:
8 x 6的棋盘。下一个7个方块为[——,|,|,——,|,——,|]
,其中'——'
表示水平的I型方块,'|'
表示垂直的I型方块。
在这种情况下,最大可能得分为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:
........
........
........
........
........
....####
即使是我能想出的最好的算法,在保存当前棋盘顶层状态(即每列的高度)时,所需时间也是指数级别的。因此,由于对于每一列高度都有H种可能性,这个算法将需要O((H^W)*n)
的时间。
是否可以使用动态规划或贪心算法在多项式时间内解决这个问题?