POJ2955 Brackets(区间DP)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ2955 Brackets(区间DP)相关的知识,希望对你有一定的参考价值。

给一个括号序列,求有几个括号是匹配的。

  • dp[i][j]表示序列[i,j]的匹配数
  • dp[i][j]=dp[i+1][j-1]+2(括号i和括号j匹配)
  • dp[i][j]=max(dp[i][k]+dp[k+1][j])(i<=k<j)
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 char str[111];
 6 int d[111][111];
 7 int main(){
 8     while(~scanf("%s",str) && str[0]!=e){
 9         int n=strlen(str);
10         memset(d,0,sizeof(d));
11         for(int len=2; len<=n; ++len){
12             for(int i=0; i+len<=n; ++i){
13                 if(str[i]==(&&str[i+len-1]==) || str[i]==[&&str[i+len-1]==]) d[i][i+len-1]=d[i+1][i+len-2]+2;
14                 for(int j=0; j<len-1; ++j) d[i][i+len-1]=max(d[i][i+len-1],d[i][i+j]+d[i+j+1][i+len-1]);
15             }
16         }
17         printf("%d\n",d[0][n-1]);
18     }
19     return 0;
20 }

 

以上是关于POJ2955 Brackets(区间DP)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2955 - Brackets - [区间DP]

POJ 2955:Brackets(区间DP)

POJ 2955 Brackets 区间dp

POJ2955 Brackets(区间DP)

POJ2955 Brackets (区间DP)

Brackets POJ - 2955 (区间dp)