码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2955 Brackets (区间DP)

时间:2015-09-24 20:55:19      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:

给你一个字符串,问其中匹配的括号有多少个?  
下面是用记忆化搜索写的。
 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL INF = 0xfffffff;
const LL maxn = 255;
char str[maxn];
int dp[maxn][maxn];
bool OK(int L,int R)
{
    if((str[L] == [ && str[R] == ]) || (str[L] == ( && str[R] == )))
        return 2;
    return 0;
}
int DFS(int L,int R)
{
    if(dp[L][R] != -1)
        return dp[L][R];
    if(L == R+1)
        return OK(L,R) ;
    if(L >= R)
        return 0;
    dp[L][R] = DFS(L+1, R);

    for(int i=L+1; i<=R; i++)
    {
        if( OK(L,i) )
            dp[L][R] = max(dp[L][R], DFS(L+1,i-1) + DFS(i+1,R) + 2);
    }
    return dp[L][R];
}

int main()
{
    while(cin >> str, strcmp(str, "end"))
    {
        memset(dp, -1, sizeof(dp));
        printf("%d\n",DFS(0, strlen(str)-1) );
    }
    return 0;
}

 

 

POJ 2955 Brackets (区间DP)

标签:

原文地址:http://www.cnblogs.com/chenchengxun/p/4836272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!