loj10150. 「一本通 5.1 练习 1」括号配对
Posted junk-yao-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loj10150. 「一本通 5.1 练习 1」括号配对相关的知识,希望对你有一定的参考价值。
思路:
纯区间dp,进行一下匹配判断就好。
#include<cstdio> #include<iostream> #include<string> using namespace std; const int maxn = 110; string st; int n; int dp[maxn][maxn]; bool mate(char a, char b){ return (a==‘[‘&&b==‘]‘)||(a==‘(‘&&b==‘)‘); } int main(void){ cin >> st; n = st.size(); st = " " + st; for(int i = 1; i<=n; ++i) dp[i][i] = 1; for(int L = 1; L < n; ++L) for(int i = 1; i + L <= n; ++i){ int j = i + L; dp[i][j] = 0x7fffffff; for(int k = i; k < j; ++k) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]); if(mate(st[i],st[j])) dp[i][j] = min(dp[i][j], dp[i+1][j-1]); } printf("%d ", dp[1][n]); }
以上是关于loj10150. 「一本通 5.1 练习 1」括号配对的主要内容,如果未能解决你的问题,请参考以下文章
loj10195. 「一本通 6.1 练习 2」转圈游戏 (loj2608)