目前的体感是在平衡度上做文章,若只考虑两串的拼接关系进行计数,可以把信息压缩到平衡度上
现有的压缩方法例如dp[i][j]表示长为i,平衡度j的括号串数目,
dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1],计左括号平衡度+1,右括号平衡度-1
这个dp后文就叫平衡度计数了,可以用作不少括号匹配计数问题的核心代码
--------------------------------------------------------------------------------------------------
例题1:629C - Famil Door and Brackets
长度为m的括号串通过在两侧各拼接一个串扩展到长为n的方法数,n-m<=2000,n1e5
由于只要前后串的平衡度满足平衡就可以算作拼接成功,可以
预处理平衡度计数,然后枚举前串的长度和平衡度进行check是否可行,
可行就往答案贡献平衡度计数
--------------------------------------------------------------------------------------------------
例题2:918C - The Monster
长为n的括号和?组成的串,问合法的括号匹配区间有多少,n5e3
复杂度首先第一维枚举左端点,第二维枚举右端点
那么尝试让这个区间做到合法匹配,一个贪心的策略是记录?的个数,这个是可调整范围的依据,
1:扫描到左括号,平衡度++
2:扫描到问号,若平衡度等于问号数目,这个问号只能当做左括号,平衡度++,否则计入问号数
3:扫描到右括号,检测平衡度正就消除1点,否则调用一个问号,问号不够直接这个区间做不到合法
优先让左右括号自然匹配,不得已才调用问号继续扫描