题解:P7255 [BalticOI 2012 Day2] 俄罗斯方块

· · 题解

很毒瘤的提交答案题。

题目大意:给你一个 1 \sim 9 的序列,每一种数字分别代表一种 1 \sim 3 块的俄罗斯方块。方块不能被旋转,只能硬降(即没有下落到一定高度再左右移动钻缝的操作。

我们称实格为包含方块的方格,空格为不包含方块的方格。

一共五个点,其中:

我的做题顺序:5\rightarrow 4\rightarrow 2\rightarrow 1\rightarrow 3

对于测试点 45,数据比较随机,写一个 dfs\space+ 估价函数就能通过。具体地,搜 3 步,3 步之后哪个局面最好,就往那个局面走一步。

估价函数包含以下几点:

这样可以通过测试点 245

能通过测试点 2 的原因是其中包含了很多 1块(即一个点),容错率很高。

对于测试点 1,观察到所有方块的高度均为 1,我们设计如下的估价函数:

这样就能通过测试点 1

最后是测试点 3。它包含7个全清定式,其中 5 个是可做的。我们称它们为 loop1\sim loop7。各个 loop 的操作见附件。

我的代码在这里