loj#P3919. 「PA 2022」Nawiasowe podziały

「PA 2022」Nawiasowe podziały

题目描述

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

我确信你是知道括号序列的,但是以防万一,并且作为回顾,让我们回忆一下它的定义:

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

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

输入格式

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

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

输出格式

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

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

6

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

3

数据范围与提示

  • 某些子任务满足 n18n\le 18
  • 某些子任务满足 n300n\le 300
  • 某些子任务满足 n4 000n\le 4\ 000
  • 某些子任务满足 k30k\le 30

对于上面提到的每种情况,都存在至少一个子任务满足。这些子任务满足条件可能不相交,也可能相交。