题意很简单,就是求给出串中最大的括号匹配数目。基础题,格式基本为简单区间dp模板。
#include<iostream> #include<string.h> using namespace std; char a[105]; int dp[105][105]; int pd(int x,int y) { if(a[x]=='['&&a[y]==']') return 1; if(a[x]=='('&&a[y]==')') return 1; return 0; } int main() { int n,i,j,k,l,s; while(cin>>a) { //cout<<a<<endl; n=strlen(a); if(a[0]=='e') return 0; memset(dp,0,sizeof(dp)); for(i=n-2;i>=0;i--) { for(j=i+1;j<n;j++) { if(pd(i,j)) dp[i][j]=dp[i+1][j-1]+2; else dp[i][j]=max(dp[i+1][j],dp[i][j-1]); for(k=i;k<j;k++) { dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]); } } } cout<<dp[0][n-1]<<endl; } }