Brackets POJ - 2955 (区间dp)
Brackets
题意:给一个括号序列,问最多有多少个括号是可以配对的。
1 #include<cstdio> 2 #include<algorithm> 3 #include<string> 4 #include<iostream> 5 #include<cstring> 6 using namespace std; 7 const int maxn=110; 8 int dp[maxn][maxn]; 9 char s[maxn]; 10 int main(){ 11 while(scanf("%s",s)&&strcmp(s,"end")!=0){ 12 memset(dp,0,sizeof(dp)); 13 int len=strlen(s); 14 for(int i=len-2;i>=0;i--) 15 for(int j=i+1;j<len;j++){ 16 if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']') dp[i][j]=dp[i+1][j-1]+2; 17 for(int k=i;k<j;k++) 18 dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]); 19 } 20 printf("%d\n",dp[0][len-1]); 21 } 22 }