题目大意:

给一个有小括号和中括号组成的序列,满足题中的三个条件时,是合法的。不满足时是不合法的,问将一个不合法的序列最少添加几个括号可以使之变成合法的。输出最短合法序列。

/*
比较坑的一道题,wa无数次。。。
思路就是区间dp的一般思路,dp[i][j]表示区间i~j之间最少加几个字符才能匹配成立
pre[i][j]表示在区间i~j中的两个子区间左端点
*/
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int inf=<<;
const int maxn=;
char str[maxn];
int n,dp[maxn][maxn];
pair<int,int>pre[maxn][maxn];
bool check(int i,int j){
if((str[i]=='('&&str[j]==')')||str[i]=='['&&str[j]==']')
return true;
return false;
}
void dfs(int l,int r){
if(l>r)return;
if(l==r){
if(str[l]=='['||str[l]==']')printf("[]");
if(str[l]=='('||str[l]==')')printf("()");
return;
}
if(check(l,r)&&dp[l][r]==dp[l+][r-]){
printf("%c",str[l]);
dfs(l+,r-);
printf("%c",str[r]);
return;
}
int sl=pre[l][r].first;
int sr=pre[l][r].second;
dfs(sl,sr);
dfs(sr+,r);
} int main(){
freopen("Cola.txt","r",stdin);
int T;
scanf("%d",&T);
getchar();
while(T--){
memset(pre,-,sizeof(pre));
gets(str);
gets(str);
n=strlen(str);
for(int i=;i<n;i++)dp[i][i]=;
for(int j=;j<n;j++){
for(int i=;i+j<n;i++){
dp[i][i+j]=inf;
if(check(i,i+j)){
dp[i][i+j]=dp[i+][i+j-];
pre[i][i+j]=make_pair(i+,i+j-);
}
for(int k=;k<=j;k++){
if(dp[i][i+j]>dp[i][i+k]+dp[i+k+][i+j]){
dp[i][i+j]=dp[i][i+k]+dp[i+k+][i+j];
pre[i][i+j]=make_pair(i,i+k);
}
}
}
}
dfs(,n-);
printf("\n");
if(T)printf("\n");
}
return ;
}

最新文章

  1. JMeter学习-028-JMeter默认jmx脚本分发目录(路径)定制
  2. SQL2008无法启动,报错&quot;17051
  3. Oracle限制某个用户的连接数及PROFILE介绍
  4. Android bitmap高效显示和优化
  5. 离散化+线段树 POJ 3277 City Horizon
  6. opencv载入,显示及保存图像
  7. Dr.Watson使用技巧摘要
  8. [POJ] 2453 An Easy Problem [位运算]
  9. QT 遍历目录查找指定文件(比较简单)
  10. ThinkPHP快捷函数
  11. SVN提交后自动推送消息到钉钉群
  12. div上下左右居中
  13. Where 与 Having
  14. SpringBoot整合全局异常处理&amp;SpringBoot整合定时任务Task&amp;SpringBoot整合异步任务
  15. 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计
  16. Microsoft VBScript 运行时错误 错误 &#39;800a0046&#39; 没有权限 解决方法
  17. Servlet——web.xml的配置
  18. Java GC垃圾回收
  19. Python:树的遍历
  20. Spring Cloud Feign组件

热门文章

  1. Unix和Linux历史文化
  2. Java基础教程:多线程基础(4)——Lock的使用
  3. 2018年东北农业大学春季校赛 E wyh的阶乘 【数学】
  4. linux 下ftp的安装配置 图文教程
  5. Maven简介(六)——Dependency
  6. python输出shell命令执行结果
  7. 小米系列手机调试Installation failed with message Failed to establish session
  8. Centos虚拟机克隆后的ip配置
  9. (转)HLS协议,html5视频直播一站式扫盲
  10. leetcode 304. Range Sum Query 2D - Immutable(递推)