#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<bitset>
#include<math.h>
#include<vector>
#include<string>
#include<stdio.h>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
char str[110];
int dp[110][110];
int pos[110][110];
void show(int start,int end)
{
if(start>end)
return ;
if(start==end)
{
if(str[start]=='('||str[start]==')')
printf("()");
if(str[start]=='['||str[start]==']')
printf("[]");
}
else
{
if(pos[start][end]==-1)
{
if(str[start]=='(')
{
printf("(");
show(start+1,end-1);
printf(")");
}
if(str[start]=='[')
{
printf("[");
show(start+1,end-1);
printf("]");
}
}
else
{
show(start,pos[start][end]);
show(pos[start][end]+1,end);
}
}
}
int main()
{
scanf("%s",str);
int n=strlen(str);
int i,k,d;
for(i=n-1;i>=0;i--)
{
str[i+1]=str[i];
dp[i+1][i+1]=1;
}
for(d=1;d<=n-1;d++)
for(i=1;i<=n-d;i++)
{
dp[i][i+d]=INF; //
if((str[i]=='('&&str[i+d]==')')||(str[i]=='['&&str[i+d]==']'))
{
if(dp[i+1][i+d-1]<dp[i][i+d])
dp[i][i+d]=dp[i+1][i+d-1];
}
pos[i][i+d]=-1;
for(k=i;k<i+d;k++)
{
if((dp[i][k]+dp[k+1][i+d])<dp[i][i+d])
{
pos[i][i+d]=k;
dp[i][i+d]=dp[i][k]+dp[k+1][i+d];
}
}
}
show(1,n);
printf("\n");
return 0;
}
Brackets Sequence
最新推荐文章于 2020-01-19 01:39:43 发布