#include<iostream> #include<cstdio> #include<cstring> using namespace std; char s[150]; int f[150][150]; //f[i][j]表示s[i]到s[j]区间匹配的最多括号数 int main() { while(scanf("%s",s)) { if(s[0]=='e') break; int len=strlen(s); memset(f,0,sizeof(f)); for(int k=2;k<=len;k++) //区间长度 { for(int i=0;i+k-1<len;i++) { int j=i+k-1; //区间右端点 if((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']')) f[i][j]=f[i+1][j-1]+2; for(int h=i;h<j;h++) //更新该区间范围的最值 f[i][j]=max(f[i][j],f[i][h]+f[h+1][j]); } } printf("%d\n",f[0][len-1]); } }
poj2955(区间dp基础)
猜你喜欢
转载自blog.csdn.net/zizahn/article/details/53037550
今日推荐
周排行