首页 > 其他 > 详细

POJ 2955 —— Brackets

时间:2016-03-27 23:48:57      阅读:418      评论:0      收藏:0      [点我收藏+]
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

char s[105];
int dp[105][105];
const char end[4] = "end";

int main ()
{
    while(scanf("%s", s) != EOF && strcmp(s, end)) {
        int len = strlen(s);
        for(int i=0; i<len-1; i++) {
            dp[i][i+1] = 2*(s[i]==( && s[i+1]==) || s[i]==[ && s[i+1]==]);
        }
        
        for(int step=2; step<len; step++) {
            for(int i=0; i+step<len; i++) {
                int j = i+step;
                
                //删去不必要的字符 
                if(s[i]!=( && s[i]!=[) {
                    dp[i][j] = dp[i+1][j];
                } else if(s[j]!=) && s[j]!=]) {
                    dp[i][j] = dp[i][j-1];
                }
                else {
                    dp[i][j]=0;
                    if(s[i]==( && s[j]==) || s[i]==[ && s[j]==]) {
                        dp[i][j] = dp[i+1][j-1]+2;
                    }
                    for(int k=i; k<j; k++) {
                        dp[i][j] = max(dp[i][j], dp[i][k] + dp[k+1][j]);
                    }
                }
            }
        }
        printf("%d\n", dp[0][len-1]);
    }
    
    return 0;
}

 

 

POJ 2955 —— Brackets

原文:http://www.cnblogs.com/AcIsFun/p/5327209.html

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