#P16152. [ICPC 2017 NAIPC] Unbalanced Parentheses

[ICPC 2017 NAIPC] Unbalanced Parentheses

题目描述

Barry 和 Bruce 是双胞胎兄弟。Bruce 喜欢保持他的括号序列平衡。Barry 想通过对序列进行一些操作来干扰 Bruce。每次操作是以下之一:

  1. 将序列中的一个 '(' 改为 ')'。
  2. 将序列中的一个 ')' 改为 '('。

Bruce 会尝试通过执行相同的操作来重新平衡括号序列。Bruce 不喜欢繁琐的事情,他最多会进行 kk 次操作来使序列平衡。

平衡括号序列的定义如下:

  1. 空字符串
  2. ABAB,其中 AABB 都是平衡的括号序列
  3. (A)(A),其中 AA 是平衡的括号序列

Barry 希望扰乱序列,使得 Bruce 无法在 kk 步内重新平衡该序列。改变序列中的某个位置需要付出努力,且不同位置的努力值不同。有些位置甚至令人愉悦地切换,需要负的努力值。每个位置最多只能改变一次。

Barry 讨厌付出努力,他想计算确保 Bruce 无法平衡该序列所需的最小努力值之和。

输入格式

每个输入包含单个测试用例。请注意,你的程序可能会在不同输入上多次运行。输入的第一行包含两个整数 nnkk,其中 nn1n1051 \leq n \leq 10^5)是序列的长度,kk0kn0 \leq k \leq n)是 Bruce 的最大操作次数。

下一行包含一个长度为 nn 的字符串,仅由字符 '(' 和 ')' 组成。该字符串不一定是平衡的。

接下来的 nn 行,每行包含一个整数 cc1,000c1,000-1{,}000 \leq c \leq 1{,}000),表示按顺序改变每个括号的成本。

输出格式

输出一个整数,表示使 Bruce 无法平衡该字符串所需的最小努力值之和。如果无论 Barry 如何操作,Bruce 总能重新平衡该字符串,则输出一个问号(?)。

4 1
((()
480
617
-570
928
480
4 3
)()(
-532
870
617
905
?

提示

翻译由 DeepSeek V3.2 完成