其实T2想清楚就不是很难,(虽然想清楚也不简单)
我这里分享一种很自然的想法,当然是区间dp啦
区间dp分6种状态
-
***
的种类数,这种情况相当与题目中的 S S S,2到5中都一样 -
(...)
的种类数,这种情况表示有括号包裹的合法序列,2到5中都一样 -
(...)***(...)***(...)***
的种类数,表示以(...)
开头,以***
结尾的一长串,没有个数限制,比如(...)***
也可以 -
(...)***(...)***(...)
的种类数,表示以(...)
开头,以(...)
结尾的一长串,没有个数限制,比如(...)
也可以 -
***(...)***(...)***(...)
的种类数,表示以***
开头,以(...)
结尾的一长串,没有个数限制,比如***(...)
也可以 -
***(...)***(...)***
的种类数,表示以***
开头,以***
结尾的一长串,没有个数限制,比如***
也可以
转移很自然:
d p [ l ] [ r ] [ 0 ] = ( r − l + 1 ≤ k ) ∗ d p [ l ] [ r − 1 ] [ 0 ] ∗ ( s [ r ] = = ′ ∗ ′ ∣ ∣ s [ r ] = = ′ ? ′ ) dp[l][r][0]=(r-l+1\le k)*dp[l][r-1][0]*(s[r]=='*'||s[r]=='?') dp[l][r][0]=(r−l+1≤k)∗dp[l][r−1][0]∗(s[r]==′∗′∣∣s[r]==′?′)
d p [ l ] [ r ] [ 1 ] = p i p e i ( l , r ) ∗ ( d p [ l + 1 ] [ r − 1 ] [ 2 ] + d p [ l + 1 ] [ r − 1 ] [ 3 ] + d p [ l + 1 ] [ r − 1 ] [ 4 ] ) dp[l][r][1]=pipei(l,r)*(dp[l