首页 > 其他 > 详细

POJ2955 Brackets(区间DP)

时间:2016-02-24 22:43:21      阅读:185      评论:0      收藏:0      [点我收藏+]

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

  • 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)

原文:http://www.cnblogs.com/WABoss/p/5215198.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!