P13731 【MGVOI R1-C】收集括号(brackets)

题目描述

本题中 **合法括号串** 的定义如下: ::::info[合法括号串的定义]{open} * ```()``` 是合法括号串。 * 若 ```A``` 是合法括号串,则 ```(A)``` 也是合法括号串。 * 若 ```A```,```B``` 均为合法括号串,则 ```AB``` 也是合法括号串。 * 所有的合法括号串都可以通过上述三条规则得到。 :::: Alice 和 Bob 正在合作玩一款叫做“收集括号”的游戏!这个游戏总共分为以下三步流程: ::::success[第一步:初始化]{open} * 首先,计算机会自动生成一个 $n$ 行 $m$ 列的方格图,其中第 $i$ 行第 $j$ 列的方格对应的坐标为 $(i,j)$。例如,左上角方格的坐标为 $(1,1)$,右下角方格的坐标为 $(n,m)$。 * 然后,计算机会在每个方格中都填入一个字符(从 ```L```,```R```,```X``` 中选择)。若某个方格中的字符为 ```L```,则表示方格中有一个左括号;若为 ```R```,则表示方格中有一个右括号;若为 ```X```,则表示方格中有一个障碍物。 :::: ::::success[第二步:Alice 的行动回合]{open} * **在第一步流程完全结束之后**,Alice 可以对方格图进行任意次(包括 $0$ 次)**反转操作**。 * 在一次反转操作中,Alice 首先需要选择方格图的 **某一行或某一列** 作为这次操作的范围。 * 之后,计算机将遍历 Alice 选择的这一行(或这一列)。对于每一个范围内的方格(除了障碍物),计算机都会反转这个方格上的字符。也就是说,如果方格上原先的字符是 ```L```,那么就将其改为 ```R```;如果原先是 ```R```,那么就将其改为 ```L```;如果原先是 ```X```,那么不做任何改动。 * 对于这一次反转操作而言,如果 Alice 选择了第 $i$ 行($1\le i\le n$)作为反转范围,那么需要花费 $a_i$ 枚金币;如果她选择了第 $j$ 列($1\le j\le m$)作为反转范围,那么需要花费 $b_j$ 枚金币。 :::: ::::success[第三步:Bob 的行动回合]{open} * **在第二步流程完全结束之后**,Bob 将从坐标为 $(1,1)$ 的方格处(也就是方格图的左上角)出发,开始收集方格图中的括号。 * 在任意时刻,Bob 都可以选择 **向正下方或正右方** 移动一个方格(前提是要到达的位置既不超过方格图的边界,也没有障碍物)。也就是说,如果 Bob 位于方格 $(x,y)$,那么他下一步就可以前往方格 $(x+1,y)$ 或者方格 $(x,y+1)$,只要他保证自己 **始终位于方格图的范围内,并且不会前往有障碍物的方格**。 * Bob 每到达一个方格,就会收集这个方格中的括号。在抵达坐标为 $(n,m)$ 的终点方格(也就是方格图的右下角)之后,他会整理自己收集到的所有括号(包括起点和终点方格的括号),并将其 **由先到后按照收集的顺序** 排成一个字符串 $S$。 * 如果 $S$ 是一个合法括号串,则 Alice 和 Bob 在这局游戏中共同获胜;否则他们在这局游戏中落败。(如果 Bob 无法到达终点方格,则也认为他们落败) :::: --- **注意:** 我们假设 Bob 是绝顶聪明的,也就是说,在 Alice 的所有操作完成之后,只要存在任何一种符合上述规则的行动方式能让他们获胜,Bob 就会采用这种行动方式。 在计算机已经填满方格图的情况下(即第一步的初始化流程已经完成),请你帮 Alice 判断,是否存在一种操作方案,使得她能够和 Bob 共同获胜?如果存在,则她最少需要花费多少枚金币来取胜?

输入格式

**每个测试点包含多组测试数据,各组测试数据之间相互独立。** 第一行包含一个正整数 $T$,表示测试数据的组数。 对于每组测试数据: 第一行包含两个正整数 $n,m$,分别表示方格图的行数和列数。**保证 $\bm{n+m}$ 是一个奇数**,这意味着 Bob 最终得到的字符串 $S$ 的长度一定为偶数。 第二行包含 $n$ 个正整数,其中第 $i$ 个正整数 $a_i$ 表示在方格图的第 $i$ 行进行反转操作需花费的金币数量。 第三行包含 $m$ 个正整数,其中第 $j$ 个正整数 $b_j$ 表示在方格图的第 $j$ 列进行反转操作需花费的金币数量。 接下来 $n$ 行,每行包含一个长度为 $m$ 的字符串(仅含 ```L```,```R```,```X``` 三种字符),其中第 $i$ 行第 $j$ 个字符即为计算机在方格 $(i,j)$ 中填入的字符。保证左上角和右下角方格中的字符不为 ```X```。

输出格式

对于每组测试数据,仅需在单独一行输出一个整数: * 如果 Alice 有可能和 Bob 共同获胜,则输出她最少需要花费的金币数; * 否则,输出 ```-1```。

说明/提示

**【样例 #1】** ::::info[样例 #1 解释] 对于第一组测试数据,计算机生成的方格图为 ```LXXR```。由于中间两个障碍物的阻挡,Bob 无法从方格 $(1,1)$ 向右移动到方格 $(1,4)$,故 Alice 和 Bob 不可能获胜,输出 ```-1```; 对于第二组测试数据,计算机生成的方格图为 ```LLRR```。显然,Bob 可以直接从方格 $(1,1)$ 向右移动到方格 $(1,4)$,最终得到的 $S=(())$ 就是一个合法括号串。因此,Alice 无需花费任何金币进行反转操作即可获胜,输出 ```0```; 对于第三组测试数据,Alice 只需花费 $b_3=1$ 枚金币对第三列使用一次反转操作。在这之后,方格图的状态变为: | $\orange{\mathtt{L}}$ | $\orange{\mathtt{R}}$ | $\orange{\mathtt{L}}$ | | -----------: | -----------: | -----------: | | $\mathtt{X}$ | $\mathtt{R}$ | $\orange{\mathtt{R}}$ | Bob 只需按照橙色方格对应的路径行动,最终可以得到 $S=()()$,这是一个合法括号串。 容易证明,要让他们获胜最少需要 $1$ 枚金币,故输出 ```1```。 :::: **【样例 #2】** ::::info[样例 #2 解释] :::success[第一组测试数据] 对于第一组测试数据,Alice 可以分别对第二行和第三列使用反转操作。在这之后,方格图的状态变为: | $\orange{\mathtt{L}}$ | $\orange{\mathtt{L}}$ | $\orange{\mathtt{R}}$ | | -----------: | -----------: | -----------: | | $\mathtt{R}$ | $\mathtt{X}$ | $\orange{\mathtt{L}}$ | | $\mathtt{L}$ | $\mathtt{X}$ | $\orange{\mathtt{R}}$ | | $\mathtt{L}$ | $\mathtt{L}$ | $\orange{\mathtt{R}}$ | * 值得注意的一点是,对于方格 $(2,3)$,由于它总共经历了两次反转,所以仍然维持最开始的状态 $\mathtt{L}$。 Bob 只需按照橙色方格对应的路径行动,最终可以得到 $S=(()())$,这是一个合法括号串。 Alice 总共需要花费 $a_2+b_3=2$ 枚金币,可以证明为最小花费。 ::: :::success[第二组测试数据] 对于第二组测试数据,Alice 可以对第四行使用反转操作。在这之后,方格图的状态变为: | $\orange{\mathtt{L}}$ | $\mathtt{L}$ | $\mathtt{L}$ | | -----------: | -----------: | -----------: | | $\orange{\mathtt{L}}$ | $\mathtt{X}$ | $\mathtt{L}$ | | $\orange{\mathtt{L}}$ | $\mathtt{X}$ | $\mathtt{L}$ | | $\orange{\mathtt{R}}$ | $\orange{\mathtt{R}}$ | $\orange{\mathtt{R}}$ | Bob 只需按照橙色方格对应的路径行动,最终可以得到 $S=((()))$,这是一个合法括号串。 Alice 总共需要花费 $a_4=1$ 枚金币,可以证明为最小花费。 ::: :::success[第三组测试数据] 对于第三组测试数据,Alice 可以分别对第一行、第二行使用反转操作。在这之后,方格图的状态变为: | $\orange{\mathtt{L}}$ | $\mathtt{L}$ | $\mathtt{L}$ | $\mathtt{L}$ | $\mathtt{L}$ | | -----------: | -----------: | -----------: | -----------: | -----------: | | $\orange{\mathtt{L}}$ | $\orange{\mathtt{L}}$ | $\mathtt{X}$ | $\mathtt{X}$ | $\mathtt{L}$ | | $\mathtt{X}$ | $\orange{\mathtt{R}}$ | $\orange{\mathtt{R}}$ | $\orange{\mathtt{R}}$ | $\mathtt{L}$ | | $\mathtt{R}$ | $\mathtt{X}$ | $\mathtt{L}$ | $\orange{\mathtt{L}}$ | $\orange{\mathtt{R}}$ | Bob 只需按照橙色方格对应的路径行动,最终可以得到 $S=((()))()$,这是一个合法括号串。 Alice 总共需要花费 $a_1+a_2=13$ 枚金币,可以证明为最小花费。 ::: :::success[第四组测试数据] 对于第四组测试数据,Alice 可以分别对第一行、第六行、第七行、第二列使用反转操作。在这之后,方格图的状态变为: | $\orange{\mathtt{L}}$ | $\orange{\mathtt{L}}$ | $\orange{\mathtt{R}}$ | $\mathtt{R}$ | $\mathtt{R}$ | $\mathtt{R}$ | $\mathtt{R}$ | $\mathtt{R}$ | $\mathtt{X}$ | $\mathtt{X}$ | | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | | $\mathtt{R}$ | $\mathtt{X}$ | $\orange{\mathtt{L}}$ | $\mathtt{X}$ | $\mathtt{L}$ | $\mathtt{X}$ | $\mathtt{L}$ | $\mathtt{L}$ | $\mathtt{R}$ | $\mathtt{L}$ | | $\mathtt{R}$ | $\mathtt{R}$ | $\orange{\mathtt{L}}$ | $\orange{\mathtt{L}}$ | $\orange{\mathtt{L}}$ | $\mathtt{L}$ | $\mathtt{X}$ | $\mathtt{L}$ | $\mathtt{L}$ | $\mathtt{L}$ | | $\mathtt{L}$ | $\mathtt{R}$ | $\mathtt{X}$ | $\mathtt{X}$ | $\orange{\mathtt{R}}$ | $\orange{\mathtt{R}}$ | $\orange{\mathtt{R}}$ | $\mathtt{X}$ | $\mathtt{L}$ | $\mathtt{X}$ | | $\mathtt{L}$ | $\mathtt{R}$ | $\mathtt{L}$ | $\mathtt{L}$ | $\mathtt{L}$ | $\mathtt{R}$ | $\orange{\mathtt{L}}$ | $\orange{\mathtt{L}}$ | $\mathtt{L}$ | $\mathtt{X}$ | | $\mathtt{X}$ | $\mathtt{L}$ | $\mathtt{R}$ | $\mathtt{R}$ | $\mathtt{X}$ | $\mathtt{R}$ | $\mathtt{X}$ | $\orange{\mathtt{R}}$ | $\orange{\mathtt{R}}$ | $\mathtt{L}$ | | $\mathtt{R}$ | $\mathtt{L}$ | $\mathtt{X}$ | $\mathtt{R}$ | $\mathtt{X}$ | $\mathtt{R}$ | $\mathtt{R}$ | $\mathtt{X}$ | $\orange{\mathtt{R}}$ | $\orange{\mathtt{R}}$ | Bob 只需按照橙色方格对应的路径行动,最终可以得到 $S=(\red{()}\blue{(}\red{((()))}\orange{(())}\blue{)})$,这是一个合法括号串。(注:括号串的颜色仅为方便观察,与答案无关) Alice 总共需要花费 $a_1+a_6+a_7+b_2=22$ 枚金币,可以证明为最小花费。 ::: :::: **【样例 #3】** 见附件中的 ```brackets/brackets3.in``` 与 ```brackets/brackets3.ans```。 这个样例满足测试点 $5 \sim 8$ 的限制。 **【样例 #4】** 见附件中的 ```brackets/brackets4.in``` 与 ```brackets/brackets4.ans```。 这个样例满足测试点 $9 \sim 12$ 的限制。 **【样例 #5】** 见附件中的 ```brackets/brackets5.in``` 与 ```brackets/brackets5.ans```。 这个样例满足测试点 $13 \sim 20$ 的限制。 --- **【数据范围】** 对于所有测试点,保证 $1\le T\le 5$,$1\le n,m\le 100$($n+m$ 为奇数),$1\le a_i,b_j\le 10^5$,并且方格图中初始填入的字符仅含 ```L```,```R```,```X```,其中左上角和右下角的字符一定不为 ```X```。 ::cute-table{tuack} | **测试点编号** | $T \le$ | $n,m \le$ | $n+m\le$ | **特殊性质** | |:-:|:-:|:-:|:-:|:-:| | $1 \sim 4$ | $1$ | $6$ | $7$ | 无 | $5 \sim 8$ | $2$ | $14$ | $15$ | ^ | $9 \sim 12$ | $5$ | $100$ | $101$ | **A** | $13 \sim 20$ | ^ | ^ | $199$ | 无 特殊性质 **A**:保证 $n=1$。 * 分值分配:每个测试点的分值为 $5$ 分。 * 为避免对算法复杂度常系数的考察,本题的时间限制被设为 1.5s。