luogu#P14996. [Nordic OI 2020] Bricks
[Nordic OI 2020] Bricks
题目描述
Josefine 正在玩一个类似俄罗斯方块的游戏,名为 bricks。游戏在一个 列 行的矩形网格中进行。一个砖块占据网格中一个 的格子。初始时网格为空。一个砖块图案是一个矩形,其中部分格子被砖块填充,其余部分是空气。以下是一个 砖块图案的例子,其中 # 代表砖块,_ 代表空气:
#_##
##__
#__#
游戏进行 轮。在每一轮中,玩家会看到一个砖块图案,她必须决定将其从网格顶部(水平方向上)何处落下。当落下砖块图案时,每个砖块将独立地沿垂直线下落,并落在网格底部或另一个砖块(来自同一图案或之前轮次)的正上方。由于砖块独立下落,之后在每一列中砖块之间不会有空隙(这与俄罗斯方块不同)。在落下砖块图案之前,玩家可以将其旋转 0、90、180 或 270 度。砖块图案必须被落下,使得所有砖块都落在网格内。
在每轮结束时,网格中所有拥有至少 3 个砖块的列将发生坍塌,这些砖块随之从网格中移除。第 轮有一个对应的轮次分数 。设 为该轮中坍塌的砖块数,则玩家在该轮获得 分。
游戏的目标是最大化所有轮次的总得分(即最大化 )。请帮助 Josefine,编写一个程序,在给定这 个砖块图案和轮次分数的情况下,计算出可能获得的最大分数。
输入格式
- 第一行:轮数 ()。
- 对于每一轮:
- 下一行:整数 , , ,其中 是第 个砖块图案的尺寸, 是轮次分数( 且 )。
- 接下来的 行:表示砖块图案,为一个由
#和_组成的 矩形,其中#代表砖块,_代表空气。(该矩形始终是能覆盖图案中所有砖块的最小可能矩形。)
输出格式
- 第一行:可能获得的最大分数。
3
2 2 10
#_
##
3 2 4
#_#
_#_
3 3 2
#_#
###
#__
30
提示
如果我们简单地将第一个砖块图案不旋转并尽可能向左落下,我们得到:
______
______
______
______
______
______
#_____
##____
然后,我们将第二个砖块图案逆时针旋转 90 度,并尽可能向左落下,我们得到:(用 X 标记坍塌的砖块——它们将在下一轮开始前消失)。
______
______
______
______
X_____
X_____
X#____
X#____
由于第二轮轮次分数是 4,我们从这一轮获得 分。最后,我们将最后一个砖块图案旋转 180 度,并将其落在从左数第二靠左的位置,我们得到:
______
______
______
______
_X____
_X_X__
_X_X__
_X#X__
最后一轮轮次分数是 ,因此我们在这一轮获得 分。总共我们得到 分。这是最优解。
评分细则
你的解法将通过子任务进行测试。要获得一个子任务的分数,你需要通过该子任务中的所有测试用例。
| # | 分数 | 限制条件 |
|---|---|---|
| 1 | 30 | |
| 2 | 70 | 无额外限制。 |
翻译由 DeepSeek V3 完成