括号匹配(二)

来源:互联网 发布:cf体验服网络出现异常 编辑:程序博客网 时间:2024/05/16 07:25
如果你已经理解了石子合并的话,那我想对于这道题应该也能够轻松的理解了。
#include
#include
#define N 101
#define MAX0xfffffff
int dp[N][N];
int mininum(int a,intb)
{
   return a
}
int main()
{
  intt,len,i,j,l,k,min,s;
  chara[N];
 scanf("%d",&t);
 getchar();//吸收一个换行符
 while(t--)
 {
   gets(a);
   len = strlen(a);
   memset(dp,0,sizeof(dp));
    for(i=0;i
         dp[i][i]=1;//一个括号需要加一个括号才能被匹配成功
    for(i=1;i
     for(j=0;j
     {
       k=j+i;min=MAX;
       dp[j][k]=MAX;
       if((a[j]=='('&&a[k]==')')||(a[j]=='['&&a[k]==']'))//如果匹配,则无需添加括号
        dp[j][k]=dp[j+1][k-1];
       //局部最小
       for(l=j;l<=k;l++)//如果不需要,就找到添加的位置
       {
           min =mininum(min,dp[j][l]+dp[l+1][k]);
       }
       //整体最小
       dp[j][k]=mininum(dp[j][k],min);
     }
     printf("%d\n",dp[0][len-1]);

 }

}

0 0
原创粉丝点击