#E0035. 01字符串清零
01字符串清零
问题背景
我们称一个字符串为一个 01字符串 当且仅当该字符串仅由字符 '0' 和 '1' 构成。
题目描述
给定一个 01字符串 ,你可以对字符串 进行任意次如下两种类型的操作:
- 操作1:选择字符串 中连续的一段字符 '1',并将这一段字符 '1' 全都变成字符 '0' 进行一次该操作的花费为 ;
- 操作2:选择字符串 中恰好一个字符 '0',并将该字符 '0' 修改为字符 '1' 进行一次该操作的花费为 。
你希望使用最小的总花费使字符串 中的每个字符都变为 '0'。
求:使字符串 中的每个字符都变为 '0' 所需的最小总花费?
输入格式
输入包含多组测试数据。
输入的第一行包含一个整数 ,表示测试数据组数。
接下来每组测试数据包含两行。其中:
第一行包含两个整数 和 ,以一个空格分隔(),分别表示将一段字符 '1' 变为 '0' 所需的花费,以及将一个字符 '0' 变为 '1' 所需的花费。
第二行包含一个 01字符串 。 仅由字符 '0' 和 '1' 构成且长度不超过 。
输出格式
对于每组测试数据,输出一行,包含一个整数,表示使字符串 中的每个字符都变为 '0' 所需的最小总花费。
2
1 1
01000010
5 1
01101110
2
6
说明/提示
样例解释
设 的下标从 开始,且用 表示字符串 的第 个字符,用 表示字符串 的从第 个字符到第 个字符(包含第 和 个字符)的子串,则:
对于第一组测试数据,最优方案是:
- 先使用操作1将 置为 '0',花费 ;
- 再使用操作1将 置为 '0',花费 。
总花费为 。
对于第二组测试数据,最优方案是;
- 先使用操作2将 置为 '1',花费 ;
- 再使用操作1将 置为 '0',花费 。
总花费为 。
数据规模与约定
设 表示字符串 的长度,则:
- 对于 的数据,
- 对于 的数据,
- 对于 的数据,,且所有测试数据的 之和不超过