括号匹配杂谈

目前的体感是在平衡度上做文章,若只考虑两串的拼接关系进行计数,可以把信息压缩到平衡度上

现有的压缩方法例如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点,否则调用一个问号,问号不够直接这个区间做不到合法

优先让左右括号自然匹配,不得已才调用问号继续扫描

posted @ 2018-03-20 19:17  Drenight  阅读(208)  评论(0编辑  收藏  举报