如果你已经理解了石子合并的话,那我想对于这道题应该也能够轻松的理解了。
return a
int t,len,i,j,l,k,min,s;
char a[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]);
}
#include
#include
#define N 101
#define MAX 0xfffffff
int dp[N][N];
int mininum(int a,int b)
{
}
int main()
{
}