标签:
区间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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/whereyousink/article/details/47283051