1 //#include2 #include 3 #include 4 #include 5 using namespace std; 6 char s[128]; 7 int dp[128][128]; 8 int n; 9 10 int dfs(int l,int r)11 {12 if(dp[l][r]!=-1)13 return dp[l][r];14 if(l==r)15 return dp[l][r]=0;16 if(l+1==r){17 if(s[l]=='('&&s[r]==')')18 return dp[l][r]=2;19 if(s[l]=='['&&s[r]==']')20 return dp[l][r]=2;21 }22 //int maxx=0;23 if(s[l]=='('&&s[r]==')')24 //maxx=max(maxx,2+rec(l+1,r-1));25 dp[l][r] = max(dp[l][r], dfs(l + 1, r - 1) + 2);26 if(s[l]=='['&&s[r]==']')27 // maxx=max(maxx,2+rec(l+1,r-1));28 dp[l][r] = max(dp[l][r], dfs(l + 1, r - 1) + 2);29 for(int k=l;k<=r-1;++k)30 //maxx=max(maxx,rec(l,k)+rec(k+1,r));31 dp[l][r] = max(dp[l][r], dfs(l, k) + dfs(k + 1, r));32 return dp[l][r];33 }34 35 int main()36 {37 while(scanf("%s",s)==1){38 if(s[0]=='e')39 break;40 memset(dp,-1,sizeof(dp));41 n=strlen(s);42 printf("%d\n",dfs(0,strlen(s)-1));43 }44 return 0;45 }
posted on 2017-04-20 21:06 阅读( ...) 评论( ...)