没啥说的,只是看着《算法艺术与信息学竞赛》上的伪代码写的,侥幸AC,事实上还是理解的不够,先把烂代码备份到这,回头找时间重写(估计又是遥遥无期了。。。
#include <iostream>
#include<string>
using namespace std;
int main()
{
string s,add;
int num,v[105][105];
cin>>num;
while(num--)
{
s="0";
cin>>add;
int n=add.size();
s+=add;
for(int i=1;i<=n;++i)
{
v[i][i-1]=0;
v[i][i]=1;
}
for(int p=1;p<=n-1;++p)
{
for(int i=1;i<=n-p;++i)
{
int j=i+p;
v[i][j]=999;
if((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']'))
v[i][j]=(v[i][j]<v[i+1][j-1] ? v[i][j] : v[i+1][j-1]);
if(s[i]=='('||s[i]=='[')
v[i][j]=(v[i][j]<v[i+1][j] ? v[i][j] : v[i+1][j]+1);
if(s[j]==')'||s[j]==']')
v[i][j]=(v[i][j]<v[i][j-1] ? v[i][j] : v[i][j-1]+1);
for(int k=i;k<=j-1;++k)
v[i][j]=(v[i][j]<(v[i][k]+v[k+1][j]) ? v[i][j] : (v[i][k]+v[k+1][j]));
}
}
cout<<v[1][n]<<endl;
}
return 0;
}