#L3919. 「PA 2022」Nawiasowe podziały

    ID: 3190 传统题 2000ms 512MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>数据结构树状数组树结构并查集模拟排列分块区间划分链表合并双向处理数据结构优化

「PA 2022」Nawiasowe podziały

题目描述

题目译自 PA 2022 Runda 5 Nawiasowe podziały

括号序列的定义:

  • () 是一个合法的括号序列。
  • 如果 SS 是一个合法的括号序列,那么 (S)(S) 也是一个合法的括号序列。
  • 如果 S1S_1S2S_2 都是合法的括号序列,那么 S1S2S_1S_2 也是一个合法的括号序列。
  • 不符合上述规则的括号序列都不是合法的括号序列。

给出一个长度为 nn 且仅由字符 () 组成的字符串,以及一个数字 kk,这个字符串不一定是合法的括号序列。你的任务是把它分成 kk 个非空段(每个字符必须恰好属于一段内),使得每段中是合法括号序列的子串个数之和最小。

输入格式

第一行两个整数 n,kn, k (1kn1000001 \le k \le n \le 100\,000),分别表示字符串长度和要分成的段数。

第二行一个长度为 nn 的字符串,保证字符串仅由 () 组成。

输出格式

输出一行一个整数,表示所有段中是合法括号序列的子串个数之和的最小值。

15 2
())(()())()(())

6

15 3
())(()())()(())

3

数据规模与约定

对于所有数据,保证:

1kn100,0001 \le k \le n \le 100,000

字符串仅由 ( 和 ) 组成

样例 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$

这些子任务满足条件可能不相交,也可能相交。