文章出處
入門級區間DP
問最長的匹配括號長度。只包含()和[]
要求匹配括號不可交叉,即([)]這種不計入
因為不計交叉情況,轉移就很直白。
枚舉區間長度l,轉移為
if( (str[i] == '(' && str[i+l-1] == ')') || (str[i] == '[' && str[i+l-1] == ']') ) dp[i][i+l-1] = max(dp[i][i+l-1],dp[i+1][i+l-2]+2);//合并相鄰區間最長括號匹配數for(int j = i; j < i+l; ++j) dp[i][i+l-1] = max(dp[i][i+l-1],dp[i][j]+dp[j+1][i+l-1]);
代碼如下:
#include#include #include #include #include #include #include #include #include #include #include #include #include
就愛閱讀www.92to.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20161116/53956.html
文章列表
全站熱搜