#L3919. 「PA 2022」Nawiasowe podziały
「PA 2022」Nawiasowe podziały
题目描述
题目译自 PA 2022 Runda 5 Nawiasowe podziały
括号序列的定义:
()
是一个合法的括号序列。- 如果 是一个合法的括号序列,那么 也是一个合法的括号序列。
- 如果 和 都是合法的括号序列,那么 也是一个合法的括号序列。
- 不符合上述规则的括号序列都不是合法的括号序列。
给出一个长度为 且仅由字符 (
和 )
组成的字符串,以及一个数字 ,这个字符串不一定是合法的括号序列。你的任务是把它分成 个非空段(每个字符必须恰好属于一段内),使得每段中是合法括号序列的子串个数之和最小。
输入格式
第一行两个整数 (),分别表示字符串长度和要分成的段数。
第二行一个长度为 的字符串,保证字符串仅由 (
和 )
组成。
输出格式
输出一行一个整数,表示所有段中是合法括号序列的子串个数之和的最小值。
15 2
())(()())()(())
6
15 3
())(()())()(())
3
数据规模与约定
对于所有数据,保证:
字符串仅由 ( 和 ) 组成
样例 1 解释:
最优的分段方法为:
())(()())()(()) = ())(()( | )()(()))
第一段中有两个子串是合法的括号序列:
()(位置 1-2)
()(位置 5-6)
第二段中有四个子串是合法的括号序列:
()(位置 10-11)
()(位置 12-13)
(())(位置 12-15)
()(())(位置 10-15)
所以把它们加起来,答案为 $2 + 4 = 6$。
样例 2 解释:
最优的分段方法为:
())(()())()(()) = ())(( | )())()(( | ))
这样分段后每段中合法括号子串数量之和最小。
子任务信息:
某些子任务满足 $n \le 18$
某些子任务满足 $n \le 300$
某些子任务满足 $n \le 4,000$
某些子任务满足 $k \le 30$
这些子任务满足条件可能不相交,也可能相交。