#include #include using namespace std; const int MAXN=210; const int INF=0x3f3f3f3f; char s[MAXN]; int dp[MAXN][MAXN],pos[MAXN][MAXN]; int len; void print(int i,int j){ if(i>j) return; if(i==j){ if(s[i]=='('||s[j]==')') printf("()"); else printf("[]"); return; } if(pos[i][j]==-1){ printf("%c",s[i]); print(i+1,j-1); printf("%c",s[j]); } else{ print(i,pos[i][j]); print(pos[i][j]+1,j); } } bool match(int i,int j) { if(s[i]=='('&&s[j]==')') return 1; if(s[i]=='['&&s[j]==']') return 1; return 0; } int main(){ int i,j,k,d,tmp; while(gets(s)!=NULL) {//使用~scanf("%s",s)出错,输入数据中有空格 memset(dp,0,sizeof(dp)); len=strlen(s); for(i=0;itmp){//如果存在更优分解,那么选择更优分解 dp[i][j]=tmp; pos[i][j]=k; } } } } print(0,len-1); printf("\n"); } return 0; }