代码: 登录后复制 //区间dp:括号匹配 #include<iostream> #include<string> #include<string.h> using namespace std; //同分果子,一个区间的结果由两个区间合并得到,讨论最优分割点 //记忆化搜索 string s; int dp[7][7]; int f(int i,int j) { if(i>=j)return 0; if(dp[i][j]!=-1)return dp[i][j]; if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']') { dp[i][j]=f(i+1,j-1)+2; } else { for(int k=i;k<j;k++) { dp[i][j]=max(dp[i][j],f(i,k)+f(k+1,j)); } } return dp[i][j]; } //测试 /*int main() { memset(dp,-1,49*4); s="([][]])"; cout<<f(0,6); } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36. 原创作者: u_16969274 转载于: https://blog.51cto.com/u_16969274/11813456