POJ 2955:Brackets

来源:互联网 发布:电脑软件无法安装 编辑:程序博客网 时间:2024/06/05 23:52

区间DP

贴个代码


#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int check(char a,char b){    if(a=='(' && b==')')        return 1;    if(a=='[' && b==']')        return 1;    return 0;}int main(){    int i,j,k,l;    char a[222];    int dp[222][222];    while(scanf("%s",a)!=EOF)    {        if(strcmp(a,"end")==0)                break;        int len=strlen(a);        memset(dp,0,sizeof(dp));        for(i=0;i<len;i++)        {                dp[i][i]=0;                if(check(a[i],a[i+1])==1)                        dp[i][i+1]=1;                else                        dp[i][i+1]=0;        }        for(l=1;l<len;l++)                for(i=0;i<len-1;i++)                {                        j=i+l;                        if(check(a[i],a[j])==1)                                dp[i][j]=dp[i+1][j-1]+2;                        //else                        for(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;}


0 0