#B1484. 矿道开采

矿道开采

【题目描述】

你有一条长度为 nn 的矿道。矿道的俯视图有五行:

  • 第 1 行是矿道一侧较远的一层区域,第 2 行是同一侧贴近矿道的一层区域;
  • 第 3 行是原有矿道;
  • 第 4 行是矿道另一侧贴近矿道的一层区域,第 5 行是同一侧较远的一层区域。

第 1 行和第 5 行表示距离矿道较远的位置,第 2 行和第 4 行表示贴近矿道的位置。图中 . 表示已经打通的区域,# 表示圆石,* 表示矿石。

你只能站在第 3 行的矿道中,并沿着垂直于矿道的方向挖掘。由于矿道已经连通,你可以自由选择列进行挖掘,横向移动不消耗体力。

对于某一列的一侧,如果要挖到距离矿道两格的位置,必须先挖通贴近矿道的一格。挖通一格后,该位置视为已经打通。

现在你有 hh 点体力,请计算最多可以获得多少块矿石。

【输入描述】

第一行输入两个整数 n,hn,h,分别表示矿道长度和体力值。

接下来输入五行,每行一个长度为 nn 的字符串。

保证:

  • 1≤n≤10001\le n\le1000;
  • 0≤h≤40000\le h\le4000;
  • 第 1、2、4、5 行的字符串只包含 # 和 *;
  • 第 3 行恰好由 nn 个 . 组成。

【输出描述】

输出一行一个整数,表示最多可以获得的矿石数量。

【样例 1】

【样例 1 输入】

20 7
##*#######**########
#########*##########
....................
#####*######**######
####################

【样例 1 输出】

5

【样例 1 解释】

一种最优挖法如下:

  • 挖掘第 10 列上方贴近矿道的矿石,消耗 11 点体力,获得 11 块矿石;
  • 挖掘第 11 列上方贴近矿道的圆石,再继续挖掘该列远处的矿石,共消耗 22 点体力,获得 11 块矿石;
  • 挖掘第 6、13、14 列下方贴近矿道的矿石,共消耗 33 点体力,获得 33 块矿石。

总共挖掘 66 格,消耗 66 点体力,获得 55 块矿石。

【样例 2】

【样例 2 输入】

8 8
*##*#*##
*#*#*#*#
........
#*#*##*#
*#*#*#*#

【样例 2 输出】

8

【样例 2 解释】

上方贴近矿道的矿石位于第 11、33、55、77 列,下方贴近矿道的矿石位于第 22、44、77 列。先挖掘这 77 个位置,消耗 77 点体力,获得 77 块矿石。

此时还剩 11 点体力。第 11 列上方和第 77 列下方的远处位置都是矿石,并且对应的贴近矿道位置已经挖通,因此任选其中一个继续挖掘,都能再获得 11 块矿石。

其他远处的矿石前面是圆石,需要先花费 11 点体力打通圆石,再花费 11 点体力挖掘矿石,无法在剩余体力内获得。因此最多获得 88 块矿石。

【数据规模与约定】

测试点编号 分数 特殊性质
1 ~ 3 30 n≤10n\le10,h≤20h\le20
4 ~ 6 只能向上或只能向下挖掘
7 ~ 10 40 无特殊性质