标签:dp
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
char str[110];
int dp[110][110];
int i,j;
while(~scanf("%s",str))
{
int len=strlen(str);
if(str[0]==‘e‘) break;
memset(dp,0,sizeof(dp));
for(i=len-1;i>=0;i--)
{
for(j=i+1;j<len;j++)
{
dp[i][j]=max(dp[i+1][j],dp[i][j-1]);
if(str[i]==‘[‘&&str[j]==‘]‘||str[i]==‘(‘&&str[j]==‘)‘)
{
dp[i][j]=dp[i+1][j-1]+2;
//printf("%d %d\n",i,j);
}
for(int x=i+1;x<j;x++)
dp[i][j]=max(dp[i][j],dp[i][x]+dp[x+1][j]);
}
}
printf("%d\n",dp[0][len-1]);
}
return 0;
}
标签:dp
原文地址:http://blog.csdn.net/zxf654073270/article/details/45565795